C 如何删除动态分配的二维数组中的特定行或列?

新手上路,请多包涵

所以,我以这种方式动态分配了一个二维数组:

 int rs, co;
cin >> ro;
cin >> co;

int **array = new int* [ro];

for(int i = 0; i < ro; i++){
    array[i] = new int [co];
}

我填了:

 for(int i = 0; i < ro; i++){
    for(int j = 0; j < co; j++){
        cout << "Row: " << i << " Column: " << j << "  : ";
        cin >> *(*(array + i) + j);
    }
}

我的问题是:如何取消分配 X 由用户给出的 X 行或列?我知道我应该使用“删除”命令,但我不明白如何

原文由 Dphan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

您不能删除一列,但可以删除一行。

如果这对您没有直接意义,请尝试阅读我的 2D 动态数组 © 。重点看图:

在此处输入图像描述

我知道我的链接是用 C 语言编写的,但是您尝试做的事情让我想起了 C。在 C++ 中,您可以使用 std::vector<int> 代替。


我假设你知道你可以写:

 array[i][j]

代替:

 *(*(array + i) + j)


删除具有两行矩阵的第一行的示例。

 delete [] array[0];
int **tmp = new int*[1];
tmp[0] = array[1];
delete [] array;
array = tmp;


广义示例:

 #include <iostream>
using namespace std;

int main(void) {
    int ro = 3, co = 2;
    int **array = new int* [ro];

    for(int i = 0; i < ro; i++){
        array[i] = new int [co];
    }
    // fill and print the matrix
    for(int i = 0; i < ro; i++){
        for(int j = 0; j < co; j++) {
            array[i][j] = i;
            cout << array[i][j] << " ";
        }
        cout << endl;
    }

    int rowToDel = 1;
    delete [] array[rowToDel];
    int **tmp = new int*[ro - 1];
    int tmpI = 0;
    for(int i = 0; i < ro; ++i)
        if(i != rowToDel)
            tmp[tmpI++] = array[i];
    delete [] array;
    array = tmp;
    ro = ro - 1;

    cout << "Array after deleting " << rowToDel << "-th row\n";
    for(int i = 0; i < ro; i++){
        for(int j = 0; j < co; j++) {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

输出:

 0 0
1 1
2 2
Array after deleting 1-th row
0 0
2 2

原文由 gsamaras 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题