📜  从动态二维数组 C++ 中删除特定行(1)

📅  最后修改于: 2023-12-03 14:49:22.153000             🧑  作者: Mango

从动态二维数组 C++ 中删除特定行

在 C++ 中,我们可以使用动态二维数组来处理一些复杂的数据结构问题。但是当需要删除二维数组中的某些特定行时,我们可能会面临一些困难。这篇文章将介绍如何从动态二维数组中删除特定行及其实现方式。

动态二维数组

在 C++ 中,我们可以使用指针和数组来构建二维数组。但是由于数组大小是静态的,无法在程序运行时动态调整大小。因此,我们通常会使用动态数组来创建动态二维数组。

以下是一个动态二维数组的示例:

int row = 5;
int col = 3;
int** arr = new int*[row];
for(int i=0;i<row;i++){
    arr[i] = new int[col];
}

这里,我们使用了一个类似于 new 的操作符来动态分配一个大小为 row * col 的二维数组。注意,这里的 arr 是一个指向指针的指针,表示一个二维的动态数组。使用 arr[i][j] 可以访问二维数组中的元素。

删除特定行

假设我们现在有一个动态二维数组 arr,我们需要删除其中的某些行。为了删除行,我们需要重新分配动态数组的大小,并将需要保留的行拷贝到新数组中。

以下是一个从动态二维数组中删除特定行的示例代码:

int row = 5;
int col = 3;
int del_row = 2;
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++){
        arr[i][j] = i + j + 1;
    }
}
// 输出原始数组
cout << "Original array:" << endl;
for(int i=0;i<row;i++){
    for(int j=0;j<col;j++){
        cout << arr[i][j] << " ";
    }
    cout << endl;
}
// 删除指定行
if(del_row < row){
    // 创建新数组
    int** new_arr = new int*[row-1];
    for(int i=0;i<row-1;i++){
        new_arr[i] = new int[col];
    }
    // 拷贝需要保留的行
    int p = 0;
    for(int i=0;i<row;i++){
        if(i != del_row){
            for(int j=0;j<col;j++){
                new_arr[p][j] = arr[i][j];
            }
            p++;
        }
    }
    // 释放原始数组内存
    for(int i=0;i<row;i++){
        delete[] arr[i];
    }
    delete[] arr;
    // 将新数组指针赋值给 arr
    arr = new_arr;
    row--;
    // 输出新数组
    cout << "New array:" << endl;
    for(int i=0;i<row;i++){
        for(int j=0;j<col;j++){
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}else{
    cout << "Invalid input!" << endl;
}

在这个示例代码中,我们使用了 del_row 变量表示需要删除的行的下标,代码主要分成以下几个步骤:

  1. 初始化一个大小为 row * col 的动态二维数组 arr
  2. 输出原始数组
  3. 如果 del_row 小于 row,则创建一个新的大小为 row-1 * col 的动态数组 new_arr
  4. 将需要保留的行拷贝到新数组中
  5. 释放原始数组的内存
  6. 将新数组的指针赋值给 arr,更新 row 的值
  7. 输出新数组

在这个示例中,我们使用了两个动态数组 arrnew_arr。当需要删除某些行时,我们需要创建一个新的数组来保存保留的行。在拷贝行时,我们使用了一个指针 p 来跟踪新数组中的行数,将需要保留的行拷贝到新数组中后,将 p 的值加 1。最终,我们将新数组的指针赋值给原始数组,释放原始数组的内存,并更新 row 的值。