获取动态二维数组元素的行/列
getting row/column of dynamic 2d array element
我目前使用以下代码来获取2D int数组中元素的当前行和列:
const int num_rows = 5;
const int num_columns = 7;
int a[num_rows][num_columns];
int *p = &a[2][4];
int row = (p - &a[0][0]) / num_columns;
int col = (p - &a[row][0]);
这工作得很好,但现在我需要改变代码,以采取行和列的数量作为参数。据我所知,这意味着我需要动态地创建2D数组:
int** ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
ary[i] = new int[sizeY];
如果我以这种方式创建2D数组,上面的代码将查找行/列中断。我能做什么?
int *ary = new int [sizeX * sizeY]; // allocate memory for the 2d array
for(int i = 0; i < sizeX; ++I)
for(j = 0; j < sizeY; ++j)
ary[i * sizeY + j] = 0;
// to get the value of collumn c and row r: use ary[c * sizeY + r];
int row = (p - &a[0][0]) / num_columns; int col = (p - &a[row][0]);
远离指针运算是个好主意。别这样!你实际上是减去指针,然后除以num_columns,这个数字将是随机的。
如果您想获得一个元素的行/列,请一次搜索一个元素。
for(int row=0; row<num_rows; ++row) {
for(int column=0; column<num_columns; ++column) {
if (a[row][column] == element) {
// we got it!
}
}
}
相关文章:
- C++使用数组作为多维数组,尽管将其初始化为带有指针的 1D
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 如何使用一维数组更改二维数组中的值?
- 获取C++中多维数组元素的所有组合
- 使用二维数组作为一维数组是否正确?可能会导致未定义的行为左右?
- 将一维数组视为二维数组
- 随机修改二维数组元素
- 如何设置二维数组一个二维返回
- 将二维数组元素复制到另一个具有其他大小的二维数组中
- 将二维数组的 1 维复制到同一数组的另一部分
- 使用C++中的指针访问多维数组元素
- 在编译时推导出二维数组的一维
- 是在内存中连续设置的二维数组,类似于模拟二维数组的一维数组
- 函数调用后对多维数组元素进行计数
- 如何使用一个动态创建的一维数组的二维数组引用仅与标准库?
- 获取动态二维数组元素的行/列
- 二维锯齿数组到一维数组的c++
- 创建QString数组的二维QVector与Qt