c++ - 使用一维迭代访问二维数组

标签 c++ c++11

如果我定义一个数组如下:

int rows = 10;
int cols = 10;

double **mat;
mat = new double*[rows];
mat[0] = new double[rows*cols];

for(int r=1; r<10; r++)
    mat[r] = &(mat[0][r*cols]);

如何通过一维遍历此数组? 例如。我想执行以下操作:

mat[10] = 1;

达到同样的效果

mat[1][0] = 1;

有没有办法取消引用 double** 数组来做到这一点?

最佳答案

根据您对 mat 的定义,您可以这样做:

double* v = mat[0]; 'use v a uni-dimensional vector
for(int i =0; i< rows* cols; i++) v[i] = 1;

或者,如果您想要将 mat 本身定义为一维 vector ,并以一种巧妙的方式将其用作二维 vector :

double mat[rows * cols];
#define MAT(i, j) mat[i*cols + j]

MAT(1, 0) = 1;
<=>
mat[10] = 1

现在您可以选择使用 mat 跨越一维矩阵或使用 MAT 宏跨越二维

关于c++ - 使用一维迭代访问二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34560968/

相关文章:

不同类型的 C++ 模板运算符重载

c++11 - constexpr 与 Define 的用例

c++ - 列出导致线程本地单例类崩溃的析构函数

c++ - boost::thread 和 std::thread 之间的区别

c++ - 即使无处调用模板函数,static_assert 也会编译失败

c# - C++ 的类索引器

c++ - 重写这个智能指针

c++ - 如何检索此数组的大小?

c++ - 返回分配的局部变量

c++ - 使用模板对字符串 vector 进行排序