Bỏ qua để đến nội dung

Mảng nhiều chiều (2D Array)

Mảng nhiều chiều là mảng của mảng - thường dùng để biểu diễn dữ liệu dạng bảng, lưới, hoặc ma trận.

#include <iostream>
int main() {
int matrix[3][4]; // Mảng 3 hàng, 4 cột, chưa có giá trị
int grid[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
std::cout << grid[0][0] << std::endl; // 1 (hàng 0, cột 0)
std::cout << grid[1][2] << std::endl; // 6 (hàng 1, cột 2)
return 0;
}
int grid[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
for (int row = 0; row < 2; row++) {
for (int col = 0; col < 3; col++) {
std::cout << grid[row][col] << " ";
}
std::cout << std::endl;
}
// 1 2 3
// 4 5 6
int grid[2][3] = {{1, 2, 3}, {4, 5, 6}};
grid[0][1] = 100; // Sửa hàng 0, cột 1
std::cout << grid[0][1] << std::endl; // 100

Mảng nhiều chiều với kích thước lớn hơn 2

Phần tiêu đề “Mảng nhiều chiều với kích thước lớn hơn 2”

C++ hỗ trợ mảng với số chiều tùy ý, dù ít gặp trong thực tế ngoài lĩnh vực đồ họa/khoa học dữ liệu:

int cube[2][3][4]; // Mảng 3 chiều: 2 x 3 x 4

Khi khai báo tham số hàm nhận mảng 2 chiều, phải chỉ rõ kích thước của tất cả các chiều trừ chiều đầu tiên:

#include <iostream>
void print_grid(int grid[][3], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 3; j++) {
std::cout << grid[i][j] << " ";
}
std::cout << std::endl;
}
}
int main() {
int grid[2][3] = {{1, 2, 3}, {4, 5, 6}};
print_grid(grid, 2);
return 0;
}

Dùng std::vector cho mảng 2 chiều linh hoạt hơn

Phần tiêu đề “Dùng std::vector cho mảng 2 chiều linh hoạt hơn”

Vì mảng C-style có kích thước cố định, khi cần một “ma trận” có thể thay đổi kích thước lúc chạy, người ta thường dùng vector lồng nhau:

#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (const auto& row : matrix) {
for (int value : row) {
std::cout << value << " ";
}
std::cout << std::endl;
}
return 0;
}
  • Biểu diễn ma trận trong toán học và đồ họa
  • Bảng điểm học sinh (hàng = học sinh, cột = môn học)
  • Bản đồ trò chơi (game board), lưới ô vuông
  • Ảnh số (mỗi điểm ảnh là một phần tử trong mảng 2 chiều)
  • Mảng 2 chiều là mảng của mảng, truy cập qua hai chỉ số [hàng][cột]
  • Khi truyền vào hàm, phải khai báo rõ kích thước của mọi chiều trừ chiều đầu tiên
  • std::vector<std::vector<T>> là lựa chọn linh hoạt hơn khi cần thay đổi kích thước lúc chạy