我有一个二维数组,我通常想要访问这些元素:
val = my_array[row][col];
但是我还需要不时地使用它们的绝对索引来访问元素,其中行和列是未知的。 "绝对"给定元素的索引可以如下计算:
abs_idx = row*numCols + col;
我正在考虑如下实现这个目标
mydatatype *my_array_abs = new mydatatype[numRows*numCols];
mydatatype **my_array = new mydatatype*[numRows];
for (int ii=0; ii<numRows; ii++)
{
my_array[ii] = &my_array_abs[ii*numCols];
}
这是实现我的目标的合适方式,还是我应该遇到任何问题或效率低下?
答案 0 :(得分:1)
为了达到你想要的效果,你需要改变你的路线:
mydatatype *my_array;
要强>
mydatatype **my_array = new mydatatype*[numRows] ;
注意:我看到这个方法只有一个问题,你需要连续的内存块。 否则你的方法很好。
答案 1 :(得分:1)
我很想使用std :: vector来避免原始数组的所有危险:
#include <vector>
#include <iostream>
typedef int mydatatype;
typedef std::vector<std::vector<mydatatype> > myvectortype;
int numCols = 10;
int numRows = 100;
mydatatype& at_absolute(myvectortype& v, int index) {
return v[index / numRows][index % numRows];
}
int main() {
myvectortype my_array(numRows, std::vector<mydatatype>(numCols, 0));
my_array[1][2] = 31;
std::cout << at_absolute(my_array, 102) << '\n';
}