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

相关推荐
Octopus20773 分钟前
【C++】读取数量不定的输入数据
开发语言·c++·笔记·学习
忘梓.3 分钟前
C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
c语言·开发语言·c++·
十五年专注C++开发16 分钟前
C++中的链式操作原理与应用(一)
开发语言·c++·设计模式
PaLu-LI26 分钟前
ORB-SLAM2源码学习:Initializer.cc:Initializer::CheckFundamental地图初始化——检查基础矩阵F并评分
c++·opencv·学习·线性代数·ubuntu·计算机视觉·矩阵
9毫米的幻想31 分钟前
【Linux系统】—— 基本指令(四)
linux·c语言·c++·学习
waves浪游37 分钟前
类和对象(中)
c语言·开发语言·数据结构·c++·算法·链表
做人不要太理性41 分钟前
【算法一周目】滑动窗口(2)
c++·算法·leetcode·哈希算法·散列表·滑动窗口
汤姆和杰瑞在瑞士吃糯米粑粑41 分钟前
【优先算法学习】双指针--结合题目讲解学习
c++·学习·算法
chian-ocean42 分钟前
从零开始:Linux 环境下的 C/C++ 编译教程
linux·c语言·c++
摆烂小白敲代码1 小时前
【算法】连通块问题(C/C++)
c语言·数据结构·c++·算法·深度优先·图论·广度优先