【发布时间】:2021-12-30 07:50:14
【问题描述】:
我想删除二维数组中最大整数的列,我是这样做的,但是为什么要删除列和行呢?我可以解决这个问题并只删除列吗?任务是用删除命令来做,但现在我认为这是不可能的
#include <iostream>
using namespace std;
int main()
{
int row = 3, col = 3;
int** arr = new int* [row];
for(int i = 0; i < row; i++){
arr[i] = new int[col];
}
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++) {
cin >> arr[i][j];
}
}
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
cout << " ------------- " << endl;
int max = 0, index = 0;
for(int i =0; i < row; i++){
for(int j = 0; j < col; j++){
if(arr[i][j] > max){
max = arr[i][j];
index = i;
}
}
}
delete [] arr[index];
int** tmp = new int*[index - 1];
int tmpI = 0;
for(int i = 0; i < col; i++){
if(i != index){
tmp[tmpI++] = arr[i];
}
}
delete [] arr;
arr = tmp;
col = col - 1;
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
【问题讨论】:
-
我推荐使用
std::vector -
index是行索引,而不是列索引。但令人费解的是,复制到tmp的循环在i < col时运行,而不是在i < row时运行,就像它在其他任何地方一样。目前还不清楚你想在那里做什么。 -
另外,
int** tmp = new int*[index - 1];没有意义。例如。如果index == 0- 最大值在第一行怎么办? -
一维数组在索引上有一些数学是二维数组的最佳表示
-
您的代码有缺陷。您正在删除一行而不是一列。仅使用 1 个
delete[]语句无法删除二维数组中的列。您的二维数组有 3 行。这些行中的每一行都必须首先复制到一个临时的一维数组,然后删除,然后使用new int[3 - 1]创建并替换为前一行的指针。然后必须将临时一维数组的内容复制回新创建的行,不包括必须删除的列。
标签: c++ for-loop multidimensional-array dynamic-memory-allocation dynamic-arrays