C++中使用嵌套循环遍历多维数组
一维数组:数组元素可以看做是一行数据。
二维数组:更像是一个表格,既有行数据又有列数据。
C++没有提供二维数组类型,但用户可以创建每个元素本身都是数组的数组。例如,假设要存储 5 个城市在 4 年间的最高气温,可以这样声明数组:
int maxtemps[4][5];
该声明意味着 maxtemps 是一个包含 4 个元素的数组,其中每个元素都是一个由 5 个整数组成的数组,可以将 maxtemps 数组看作由 4 行组成,其中每一行有 5 个温度值。
表达式 maxtemps[0] 是 maxtemps 数组的第一个元素,其本身就是一个由 5 个 int 组成的数组,maxtemps[0] 数组的第一个元素是 maxtemps[0][0]
,该元素是一个 int。因此,需要使用两个下标来访问 int 元素。可以认为第一个下标表示行,第二个下标表示列
假设要打印数组的所有内容,可以用一个 for 循环来改变行,用另一个被嵌套的 for 循环来改变列:
cpp
for ( int row = 0; row < 4; row++ )
{
for ( int col = 0; col < 5; ++col )
cout << maxtemps[row][col] << "\t";
cout << endl;
}
对于每个 row 值,内部的 for 循环将遍历所有的 col 值,并在每个值之后打印一个制表符,打印完每行后,打印一个换行符。
如果您想在程序中遍历一个三行、三列的二维数组,此时,一般的做法是:分别访问数组中的每个元素,每个元素占一行代码。这种方式的可扩展性不强,如果数组变大了,除修改各维的长度外,还需添加大量的代码。然而,使用循环可改变这一点,例如,以下程序所示:
cpp
#include <iostream>
using namespace std;
int main()
{
const int NUM_ROWS = 3;
const int NUM_COLUMNS = 4;
// 2D array of integers
int MyInts[NUM_ROWS][NUM_COLUMNS] = { {34, -1, 879, 22},
{24, 365, -101, -1},
{-20, 40, 90, 97} };
// iterate rows, each array of int
for (int row = 0; row < NUM_ROWS; ++row)
{
// iterate integers in each row (columns)
for (int column = 0; column < NUM_COLUMNS; ++column)
{
cout << "Integer[" << row << "][" << column \
<< "] = " << MyInts[row][column] << endl;
}
}
return 0;
}
输出:
Integer[0][0] = 34
Integer[0][1] = -1
Integer[0][2] = 879
Integer[0][3] = 22
Integer[1][0] = 24
Integer[1][1] = 365
Integer[1][2] = -101
Integer[1][3] = -1
Integer[2][0] = -20
Integer[2][1] = 40
Integer[2][2] = 90
Integer[2][3] = 97
分析:
第 14~22 行包含遍历二维 int 数组所需的两个 for 循环。二维数组实际上是数组的数组。注意到第一个 for 循环访问行,每行都是一个 int 数组;而第二个 for 循环访问数组中的每个元素,即列。
注意:
以上示例程序使用大括号将嵌套的 for 循环括起来了,这只是为了改善可读性。即便没有大括号,嵌套的循环也不会有问题,因为循环语句只是一条语句,而不是复合语句,需要必须用大括号括起。
该文章会更新,欢迎大家批评指正。
推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程