📜  传递二维数组 cpp - C++ (1)

📅  最后修改于: 2023-12-03 15:36:24.009000             🧑  作者: Mango

传递二维数组(C++)

在 C++ 中传递二维数组有多种方法,可以使用指针和动态内存分配,也可以使用 STL 容器类和模板参数来传递。这篇文章将介绍两种常用的方法。

使用指针和动态内存分配来传递二维数组

在 C++ 中,通过定义指向指针的指针来表示二维数组。定义时需要使用 * 来指定指针类型。动态内存分配可通过 newdelete 关键字来进行。下面是一个示例代码:

void print_array(int **arr, int row, int col) {
    for(int i=0; i<row; i++) {
        for(int j=0; j<col; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    int row = 3, col = 4;
    int **arr = new int*[row];

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

    print_array(arr, row, col);

    for(int i=0; i<row; i++) {
        delete [] arr[i];
    }

    delete [] arr;

    return 0;
}

在这个示例中,在 main 函数中使用了 new 关键字来为二维数组分配内存。第一行 int **arr = new int*[row] ,分配了一个指针数组,其中每个指针都指向一个整型数组。在循环体内使用 new 再为每个指针指向的数组分配内存。

最后需要注意的是要在不再需要使用二维数组时使用 delete 关键字释放内存。首先需要用循环释放指向的每个一维数组,再释放指向这些数组的指针数组。

使用 STL 容器类 vector 和模板参数来传递二维数组

STL 中的 vector 容器类可以动态存储数据,并且通过 vector 的嵌套使用,可以方便地表示二维及以上维度的数组。通常情况下,我们使用二维 vector 来表示二维数组。

下面是一个使用二维 vector 表示二维数组的示例代码:

void print_array(vector<vector<int>> arr) {
    for(int i=0; i<arr.size(); i++) {
        for(int j=0; j<arr[0].size(); j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    int row = 3, col = 4;
    vector<vector<int>> arr(row, vector<int>(col));

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

    print_array(arr)

    return 0;
}

在这个示例中,我们分配了一个二维 vector 型的 container,即 vector<vector<int>> arr(row, vector<int>(col)) 它表示 row 行 col 列的数组,每个元素都是一个 int 类型。

最后需要注意的是,使用 vector 容器类时,不需要手动释放内存。vector 自己会管理内存,那么可以加快编程的速度,避免内存泄漏。

总结

通过上述两种方式,你已经学会了在 C++ 中传递二维数组的方法。使用指针和动态内存分配可以实现灵活的内存控制,而使用 vector 则可以简化编程操作,使代码更具可读性和可维护性。在具体开发中,应根据情况选择适合的方法。