Mảng hai chiều trong C++


Cho một mảng a = {1, 2, 4, 6, 8}, ta có thể biểu diễn trực quan mảng a như sau:

Mảng trên thể hiện dữ liệu cho một "hàng" như một danh sách, đây gọi là mảng một chiều.

Khi cần quản lý dữ liệu theo dạng bảng (nhiều hàng, nhiều cột), ta sử dụng mảng hai chiều.

Khởi tạo mảng hai chiều

Cú pháp:

<kiểu_dữ_liệu> <tên_mảng>[<số_hàng>][<số_cột>];

Ví dụ 1

Khởi tạo một mảng hai chiều có \(5\) hàng\(4\) cột:

Mã nguồn

C++
int a[5][4];

Ta cũng có thể khởi tạo mảng hai chiều với các giá trị cho trước.

Ví dụ 2

Mã nguồn

C++
int b[2][3] = {{1, 2, 3}, {4, 5, 6}};

Duyệt phần tử trong mảng hai chiều

Để truy cập phần tử ở hàng \(x\), cột \(y\), ta sử dụng a[x][y]. Ví dụ, với mảng a[4][4] ta có bảng chỉ số tương ứng như sau:

Cột 0 Cột 1 Cột 2 Cột 3
Hàng 0 a[0][0] a[0][1] a[0][2] a[0][3]
Hàng 1 a[1][0] a[1][1] a[1][2] a[1][3]
Hàng 2 a[2][0] a[2][1] a[2][2] a[2][3]
Hàng 3 a[3][0] a[3][1] a[3][2] a[3][3]

Ví dụ 1

Mã nguồn

C++
#include <bits/stdc++.h>

using namespace std;

int main() {
    int a[4][4] = {
    {1, 2, 3, 4}, 
    {5, 6, 7, 8}, 
    {9, 10, 11, 12}, 
    {13, 14, 15, 16}
    };
    for (int i = 0; i <= 3; i++) {
        for (int j = 0; j <= 3; j++) {
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}

Đầu ra

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Ta sử dụng \(2\) vòng lặp lồng nhau để in ra mảng \(2\) chiều. Vòng lặp đầu tiên sẽ xét lần lượt các hàng, vòng lặp thứ hai sẽ xét lần lượt các cột.

Lưu ý rằng mảng có một hay hai chiều thì phần tử đầu tiên của một hàng vẫn bắt đầu từ chỉ số \(0\). Để thuận tiện cho các bài tập, ta sử dụng mảng từ chỉ số \(1\) như sau:

Ví dụ 2

Tính tổng các số trên cùng một hàng của một bảng vuông kích thước \(3 \times 3\).

Mã nguồn

C++
#include <bits/stdc++.h>

using namespace std;

int a[4][4];

int main() {
    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 3; j++) {
            cin >> a[i][j];
        }
    }

    for (int i = 1; i <= 3; i++) {
        int tong = 0;
        for (int j = 1; j <= 3; j++) {
            tong += a[i][j];
        }
        cout << "Tong hang " << i << ": " << tong << "\n";
    }

    cout << tong;

    return 0;
}

Đầu vào

1 2 3
4 5 6
7 8 9

Đầu ra

Tong hang 1: 6
Tong hang 2: 15
Tong hang 3: 24

Để lưu trữ dữ liệu của bảng \(3 \times 3\), ta khai bảo mảng kích thước tối thiểu là \(4 \times 4\) và bỏ qua chỉ số \(0\).

Mảng nhiều chiều

Mảng hai chiều là một dạng đặc biệt của mảng nhiều chiều, trong đó dữ liệu được tổ chức theo hàng và cột. Khi cần biểu diễn dữ liệu phức tạp hơn, chẳng hạn như hình ba chiều, thời gian, hay nhiều lớp thông tin, ta sử dụng mảng nhiều chiều. Ta có thể thêm chiều cho mảng bằng cách thêm cặp ngoặc vuông [] khi khai báo.

Ví dụ

Mảng số nguyên 3 chiều

Mã nguồn

C++
int a[4][4][10];

Mảng số thực 4 chiều

Mã nguồn

C++
double b[4][4][10][20];

Mảng logic 5 chiều

Mã nguồn

C++
bool a[4][4][10][20][5];

Mảng xâu 6 chiều

Mã nguồn

C++
string a[4][4][10][20][5][9];