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.
Khai báo mảng 2 chiều
Phần tiêu đề “Khai báo mảng 2 chiều”#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;}Duyệt mảng 2 chiều
Phần tiêu đề “Duyệt mảng 2 chiều”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 6Sửa đổi phần tử
Phần tiêu đề “Sửa đổi phần tử”int grid[2][3] = {{1, 2, 3}, {4, 5, 6}};grid[0][1] = 100; // Sửa hàng 0, cột 1std::cout << grid[0][1] << std::endl; // 100Mả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 4Truyền mảng 2 chiều vào hàm
Phần tiêu đề “Truyền mảng 2 chiều vào hàm”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;}Ứng dụng thực tế
Phần tiêu đề “Ứng dụng thực tế”- 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)
Tổng kết
Phần tiêu đề “Tổng kết”- 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