C++中使用嵌套循环遍历多维数组

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++后台高级服务器课程

相关推荐
float_com13 分钟前
【STL】stack,deque,queue 基础,应用与操作
c++·stl·极速入门
学习使我变快乐21 分钟前
C++:用类实现链表,队列,栈
开发语言·c++·链表
lmy_t27 分钟前
C++之第十二课
开发语言·c++
tyler-泰勒1 小时前
初始c++:入门基础(完结)
java·开发语言·c++
sinat_276522573 小时前
C++中move的使用
开发语言·c++
微尘83 小时前
C语言存储类型 auto,register,static,extern
服务器·c语言·开发语言·c++·后端
金博客3 小时前
Qt 模型视图(二):模型类QAbstractItemModel
c++·qt6.7.2
五味香4 小时前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
无名之逆4 小时前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试
Beauty.5684 小时前
P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
数据结构·c++·算法