我想知道从性能的角度来看,我可以使用什么标准容器来替代 char board[8][8]
。该板需要经常访问以进行读取和写入。在算法期间可能会构建多达 100 万个新板。每个元素只允许三个可能的值:-1、0、1,因此一 block 板的有用位总数实际上是 128。我想到了一个围绕 std::bitset<128> 构建的自定义类型,其中包含所有必需的(内联)operator[]、==、= 等定义为将其作为二维数组访问,但我不确定与原始 char[8][8] 相比这是否会加快访问速度。我也不关心内存使用量的增加,这不是问题。
最佳答案
我会使用 std::array<signed char, 64>
并以 a[8 * i + j]
的形式访问它*。进入子字节粒度没有意义,因为无论如何这些 64B 可能都在同一个缓存行中,并且您可以像那样快速访问。您甚至可以尝试 int
的数组用于比较;可能是字大小的访问速度更快。只有剖析才能知道。
*) 甚至 std::array<std::array<char>, 8>, 8>
,正如正确评论的那样。本质上是一样的,尽管可能更容易使用。
关于c++ - 字符数组的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8418190/