网格的大小在开始时就已知(但每次程序启动时都会有所不同)。但是,每个单元格的深度不仅仅是一个值,而是一组在运行时会不断变化的对象。
问:什么是最推荐的(高效且易于维护;不易出现用户错误)的实现方式?
答案 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
向量并将其归零)。