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 và \(4\) cột:
Mã nguồn
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
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
#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
#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
int a[4][4][10];
Mảng số thực 4 chiều
Mã nguồn
double b[4][4][10][20];
Mảng logic 5 chiều
Mã nguồn
bool a[4][4][10][20][5];
Mảng xâu 6 chiều
Mã nguồn
string a[4][4][10][20][5][9];