Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khai báo mảng 2D động với new trong C++

Mảng 2D động thực chất là mảng các con trỏ, mỗi con trỏ trỏ đến một mảng 1D (hàng).

Các bước

  1. Cấp phát mảng con trỏ hàng: int** a = new int*[rows];
  2. Với mỗi hàng, cấp phát mảng cột: a[i] = new int[cols];
  3. Sử dụng như mảng 2D bình thường: a[i][j]
  4. Giải phóng ngược lại: xóa từng hàng, rồi xóa mảng con trỏ.

Ví dụ mã hoàn chỉnh

#include <iostream>
using namespace std;

int main() {
    const int ROWS = 4, COLS = 5;
    int** a = new int*[ROWS];

    for (int i = 0; i < ROWS; ++i)
        a[i] = new int[COLS];

    // Khởi tạo
    for (int i = 0; i < ROWS; ++i)
        for (int j = 0; j < COLS; ++j)
            a[i][j] = i;

    // In
    for (int i = 0; i < ROWS; ++i) {
        for (int j = 0; j < COLS; ++j)
            cout << a[i][j] << ' ';
        cout << '\n';
    }

    // Giải phóng
    for (int i = 0; i < ROWS; ++i)
        delete [] a[i];
    delete [] a;

    return 0;
}

Kết quả

0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3

Thay thế hiện đại: Dùng vector<vector<int>> matrix(rows, vector<int>(cols)) – tự động quản lý bộ nhớ, an toàn ngoại lệ.