这是一个很简单的问题:
我正在编写一个Go程序。我应该用QVector<int>
还是QVector<Player>
来表示棋盘?
enum Player
{
EMPTY = 0,
BLACK = 1,
WHITE = 2
};
我猜使用 Player 而不是整数会更慢。但我想知道差别有多大,因为我认为使用 enum
是更好的编码方式。
关于分配和比较 Player(而不是 int
),我已经进行了一些测试。
QVector<int> vec;
vec.resize(10000000);
int size = vec.size();
for(int i =0; i<size; ++i)
{
vec[i] = 0;
}
for(int i =0; i<size; ++i)
{
bool b = (vec[i] == 1);
}
QVector<Player> vec2;
vec2.resize(10000000);
int size = vec2.size();
for(int i =0; i<size; ++i)
{
vec2[i] = EMPTY;
}
for(int i =0; i<size; ++i)
{
bool b = (vec2[i] == BLACK);
}
基本上,速度只慢了10%。在继续之前,我还应该知道什么吗?
谢谢!
编辑:10%的差异不是我幻想出来的,它似乎特定于Qt和QVector。当我使用std::vector时,速度相同。
sizeof(Player)
和sizeof(int)
之间的差异吗?编译器可能已经决定,由于Player中只有3个值,它可以用更小的类型表示,这可能会给你带来性能损失。 - Shahbaz