首页 > 编程语言 >C++ 使用范围 for 遍历多维数组用引用

C++ 使用范围 for 遍历多维数组用引用

时间:2024-09-21 17:05:54浏览次数:1  
标签:遍历 C++ ia 数组 多维 size colCnt row

int main()
{
    constexpr size_t rowCnt = 3, colCnt = 4;
    int ia[rowCnt][colCnt];

    // 使用 for 循环遍历初始赋值
    for (size_t i = 0; i != rowCnt; ++i)
    {
        for (size_t j = 0; j != colCnt; ++j)
        {
            ia[i][j] = i * colCnt + j;
        }
    }

    // 使用范围 for 遍历
    for (const auto &row : ia)
    {
        for (auto col : row)
        {
            cout << col << endl;
        }
    }

    // 使用范围 for 修改
    for (auto &row : ia)
    {
        for (auto &col : row)
        {
            ++col;
        }
    }

    // 输出看一下
    cout << '\n';
    for (const auto &row : ia)
    {
        for (auto col : row)
        {
            cout << col << endl;
        }
    }

    // 下面这种形式不行
    /*
    for (auto row : ia) // row 被解析成 int * 类型了
        for (auto col : row)  // 编译报错
    */

    return EXIT_SUCCESS;
}

输出:

0
1
2
3
4
5
6
7
8
9
10
11

1
2
3
4
5
6
7
8
9
10
11
12

因为row不是引用类型,所以编译器初始化 row 时会自动将这些数组形式的元素(和其他类型的数组一样)转换成指向该数组内首元素的指针。

Note:

要使用范围 for 语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该引用类型




《C++ Primer》 P114

标签:遍历,C++,ia,数组,多维,size,colCnt,row
From: https://www.cnblogs.com/huvjie/p/18424225

相关文章

  • C++ 数组的 auto 和 decltype
    当使用数组作为一个auto(参见2.5.2节,第61页)变量的初始值时,推断得到的类型是指针而非数组:intia[]={0,1,2,3,4,5,6,7,8,9};//ia是一个含有10个整数的数组autoia2(ia);//ia2是一个整型指针,指向ia的第一个元素ia2=42;......
  • vector--C++
    文章目录一、vector1、vector的介绍及使用1.1、vector的介绍1.2、vector的使用1.3、vector的定义1.4、vectoriterator的使用1.5、vector空间增长问题1.6、vector增删查改1.7、vector迭代器失效问题(重点)1.8、指定位置元素的删除操作--erase2、注意:Linux下,g++编译器......
  • C++ 数组声明和初始化
    显式初始化数组元素如果指明了维度,那么初始值的总数量不应该超出指定的大小。如果维度比提供的初始值数量大,则用提供的初始值初始化靠前的元素,剩下的元素被初始化成默认值(参见3.3.1节,第88页):constunsigneds=3;intial[sz]={0,1,2};//含有3个元素的数组,元素值分......
  • C++ 知识要点:I/O 模型
    1.使用同步IO模型实现的Reactor模式的工作流程(以epoll_wait为例)在Reactor模式中,主线程(也称为事件循环或分发器)负责监听和分发事件,工作线程负责处理具体的业务逻辑。以下是使用epoll_wait实现Reactor模式的工作流程,详细描述了事件的处理过程:1.主线程往epoll......
  • c++第3课
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ inta=0; a=a+10; a=a+1; cout<<a; return0;}这叫累加,注意,cout<<a;这里不要加括号,不然输出结果会这样子:a这是因为加括号只输出a,而不加括号则输出11。1.取出4123的十位想要取出4123的十位就要用到/和%,......
  • c++算法 枚举———百钱白鸡问题
    前言枚举,是一种最基本的算法思想,通过穷举枚举出所有的可能,再加以比较。枚举算法适用于问题规模较小、解空间可穷举的情况。它的优点是简单直观,不需要复杂的数学推导,易于实现。但是,对于问题规模较大的情况,枚举算法的时间复杂度可能会非常高,效率较低。接下来会介绍两个百钱白......
  • 【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
    文章目录C++类与对象前言读者须知RVO与NRVO的启用条件如何确认优化是否启用?1.按值传递与拷贝省略1.1按值传递的概念1.2示例代码1.3按值传递的性能影响1.3.1完全不优化1.4不同编译器下的优化表现1.4.1VisualStudio2019普通优化1.4.2VisualStudio2022激进......
  • 【c++】动态内存管理
    ......
  • 大学C++程序设计课程开发指南——开发环境搭建
    前言由于某些大学程序设计课程仍然在使用VC6.0这一上古工具,不太适合学生与现代开发生产接轨,并且也有可能出现兼容问题等,故编写此文,仅供参考。使用VisualStudio在介绍VisualStudio(此后简称VS)前,先给大家介绍这一工具的发展。其前身正是VC6.0(全称VisualC++6.0,二十世纪末和......
  • 深入探索:深度优先遍历与广度优先遍历的奥秘与应用
    在算法和数据结构的广阔领域中,图的遍历是一个核心且基础的概念,它支撑着众多高级算法和应用的实现。深度优先遍历(DFS)和广度优先遍历(BFS)作为图的两种基本遍历方式,不仅具有深刻的理论意义,还广泛应用于各种实际问题中。本文将更深入地探讨这两种遍历方式的原理、实现细节、性能......