C ++对象的二维数组的最佳数据结构是什么?#34;"?

时间:2013-05-20 00:44:10

标签: arrays vector multidimensional-array grid collision

网格的大小在开始时就已知(但每次程序启动时都会有所不同)。但是,每个单元格的深度不仅仅是一个值,而是一组在运行时会不断变化的对象。

问:什么是最推荐的(高效且易于维护;不易出现用户错误)的实现方式?

  • 这是某种标准的矢量指针2D数组吗?
  • 是3D矢量数组吗?
  • 是链接列表或二叉树的二维数组(我认为二进制树会因为连续删除和插入节点 - 体操而增加复杂性开销)
  • 是否有其他自定义数据结构?

enter image description here

1 个答案:

答案 0 :(得分:2)

使用1D阵列获得最佳缓存位置。 vector对此没问题。

std::vector<int> histdata( width * height );

如果您需要快速索引行,那么请指出一些内容:

std::vector<int*> histogram( height );
histogram[0] = &histdata[0];
for( int i = 1; i < height; i++ ) {
    histogram[i] = histogram[i-1] + width;
}

现在您有一个存储在一维矢量中的二维直方图。您可以像这样访问它:

histogram[row][col]++;

如果你把所有这些都包含在一个简单的类中,你就不太可能用指针做一些愚蠢的事情。您还可以使用clear()函数将直方图数据设置为零(它只是翻过histdata向量并将其归零)。