c++ - 字符数组的替代品

标签 c++

我想知道从性能的角度来看,我可以使用什么标准容器来替代 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/

相关文章:

c++ - 我什么时候应该使用 vector<int>::size_type 而不是 size_t?

c++ - 我将如何实现这种蛮力中值搜索算法?

c++ - linux中g++编译器下的lambda表达式

c++ - 返回一个空字符串 : efficient way in c++

C++构造函数混淆

c++ - 根据最小和查找数组的元素

c++ - OpenCV:输出图像为蓝色

c++ - 将字符串作为二进制写入/读取到随机访问的文件中

c++ - Perl 5.14 源代码 - 示例程序失败

c++ - FW1FontWrapper IFW1ColorRGBA