Mảng đa chiều trong C++
Mảng đa chiều
Mảng nhiều chiều là một mảng gồm nhiều mảng.
Để khai báo một mảng nhiều chiều, hãy xác định loại biến, chỉ định tên của mảng, theo sau là dấu ngoặc vuông cho biết mảng chính có bao nhiêu phần tử, theo sau là một bộ dấu ngoặc vuông khác cho biết mảng con có bao nhiêu phần tử :
string letters[2][4];
Giống như các mảng thông thường, bạn có thể chèn các giá trị bằng một mảng bằng chữ - một danh sách được phân tách bằng dấu phẩy bên trong dấu ngoặc nhọn. Trong mảng nhiều chiều, mỗi phần tử trong một mảng đều là một mảng khác.
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E",
"F", "G", "H" }
};
Mỗi bộ dấu ngoặc vuông trong khai báo mảng sẽ thêm một chiều khác vào mảng. Một mảng như mảng trên được cho là có hai chiều.
Mảng có thể có số chiều bất kỳ. Mảng càng có nhiều chiều thì mã càng trở nên phức tạp. Mảng sau có ba chiều:
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
Truy cập các phần tử của mảng nhiều chiều
Để truy cập một phần tử của mảng nhiều chiều, hãy chỉ định số chỉ mục trong mỗi chiều của mảng.
Câu lệnh này truy cập giá trị của phần tử ở hàng đầu tiên (0) và cột thứ ba (2) của mảng các chữ cái .
Ví dụ
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E",
"F", "G", "H" }
};
cout << letters[0][2]; // Outputs "C"
Hãy tự mình thử »Hãy nhớ rằng: Chỉ mục mảng bắt đầu bằng 0: [0] là phần tử đầu tiên. [1] là phần tử thứ hai, v.v.
Thay đổi các phần tử trong mảng nhiều chiều
Để thay đổi giá trị của một phần tử, hãy tham khảo số chỉ mục của phần tử trong mỗi thứ nguyên:
Ví dụ
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E",
"F", "G", "H" }
};
letters[0][0] = "Z";
cout << letters[0][0]; // Now outputs
"Z" instead of "A"
Hãy tự mình thử »Lặp qua một mảng nhiều chiều
Để lặp qua một mảng nhiều chiều, bạn cần một vòng lặp cho mỗi chiều của mảng.
Ví dụ sau xuất ra tất cả các phần tử trong mảng chữ cái :
Ví dụ
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E",
"F", "G", "H" }
};
for (int i = 0; i < 2; i++) {
for (int j
= 0; j < 4; j++) {
cout << letters[i][j] << "\n";
}
}
Hãy tự mình thử »Ví dụ này cho thấy cách lặp qua một mảng ba chiều:
Ví dụ
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++)
{
cout << letters[i][j][k] << "\n";
}
}
}
Hãy tự mình thử »Tại sao mảng đa chiều?
Mảng đa chiều rất tốt trong việc biểu diễn lưới. Ví dụ này cho thấy cách sử dụng thực tế của chúng. Trong ví dụ sau, chúng tôi sử dụng mảng đa chiều để thể hiện một trò chơi Battleship nhỏ:
Ví dụ
// We put "1" to indicate there is a ship.
bool ships[4][4] = {
{
0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{
0, 0, 1, 0 }
};
// Keep track of how many hits the player has and
how many turns they have played in these variables
int hits = 0;
int
numberOfTurns = 0;
// Allow the player to keep going until they have
hit all four ships
while (hits < 4) {
int row, column;
cout << "Selecting coordinates\n";
// Ask the player for a row
cout << "Choose a row number between 0 and 3: ";
cin >> row;
// Ask the player for a column
cout << "Choose a column number
between 0 and 3: ";
cin >> column;
// Check if a ship
exists in those coordinates
if (ships[row][column]) {
// If the player hit a ship, remove it by setting the value to zero.
ships[row][column] = 0;
// Increase the hit counter
hits++;
// Tell the player that they have hit a ship
and how many ships are left
cout << "Hit! " << (4-hits)
<< " left.\n\n";
} else {
// Tell the player
that they missed
cout << "Miss\n\n";
}
// Count how many turns the player has taken
numberOfTurns++;
}
cout << "Victory!\n";
cout << "You won in " << numberOfTurns << " turns";
Chạy ví dụ »