C++使用范围for语句处理多维数组

news2024/12/27 0:02:48

循环访问二维数组时出现如下问题:

 error: invalid range expression of type 'int *'; no viable 'begin' function available
    for (auto col : row){
                  ^ ~~~
1 error generated.

问题复现

初始化数组

constexpr size_t rowCnt = 3, colCnt = 4;
int ia[rowCnt][colCnt];
for (size_t i = 0; i != rwoCnt; i++){
    for (size_t j = 0; j != colCnt; j++){
        ia[i][j] = i * colCnt + j;
    }
}

C++11中新增了范围for语句,所以前一程序可以简化成如下形式

size_t cnt = 0;
for (auto &row : ia){
    for (auto &col : row){
        col = cnt;
        cnt++;
    }
}

这个循环赋给ia元素的值和之前那个循环是完全相同的,区别之处是通过使用范围 for语句把管理数组索引的任务交给了系统来完成。

因为要改变元素的值,所以得把控制变量 row和col声明成引用类型。

第一个for循环遍历ia的所有元素,这些元素是大小为 4 的数组,因此 row的类型就应该是含有4个整数的数组的引用。

第二个 for 循环遍历那些4元素数组中的某一个,因此col的类型是整数的引用。每次迭代把 cnt 的值赋给 ia 的当前元素,然后将 cnt 加 1。

在上面的例子中,因为要改变数组元素的值,所以我们选用引用类型作为循环控制变量,但其实还有一个深层次的原因促使我们这么做。举一个例子,考虑如下的循环∶

for (const auto &row : ia){
    for (auto col : row){
        cout << col << endl;
    }
}

这个循环中并没有任何写操作,可是我们还是将外层循环的控制变量声明成了引用类型,这是为了避免数组被自动转成指针。假设不用引用类型,则循环如下述形式∶

for (auto row : ia){
    for (auto col : row){
        cout << col << endl;
    }
}

程序将无法通过编译。这是因为,像之前一样第一个循环遍历 ia的所有元素,注意这些元素实际上是大小为 4的数组。编译器会有如下提示,

在这里插入图片描述

因为 row不是引用类型,所以编译器初始化row 时会自动将这些数组形式的元素(和其他类型的数组一样)转换成指向该数组内首元素的指针。这样得到的 row 的类型就是 int * ,显然内层的循环就不合法了,编译器将试图在一个 int * 内遍历,这显然和程序的初衷相去甚远。

因为 row不是引用类型,所以编译器初始化row 时会自动将这些数组形式的元素(和其他类型的数组一样)转换成指向该数组内首元素的指针。这样得到的 row 的类型就是 int * ,显然内层的循环就不合法了,编译器将试图在一个 int * 内遍历,这显然和程序的初衷相去甚远。

参考

https://www.cnblogs.com/lihello/p/14314018.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网站项目】SpringBoot380百天公司财务管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

AD162A低功耗语音解码芯片,助眠耳机方案推荐—云信通讯

睡眠一直是很多人所追寻的目标&#xff0c;无论是因为工作压力过大&#xff0c;还是日常烦扰的思绪&#xff0c;一个好的睡眠质量对每个人来说都至关重要。为了解决这个问题&#xff0c;一些科技公司开发了高品质的助眠耳机&#xff0c;通过音乐和声音来帮助入睡&#xff0c;为…

618好物推荐,每一款都是心头好

618买什么&#xff1f;&#xff01;是不是又要开始剁手了&#xff1f;&#xff01;买贵不如买对&#xff0c;收下这份好物推荐&#xff0c;无论你是有购物需求还是观望中&#xff0c;无论是日常好物还是智能家电&#xff0c;无论你是追求平价还是实用&#xff0c;这一篇好物推荐…

eNSP-集线器(hub)连接局域网

一、拓扑结构搭建 二、主机配置 pc1、pc2、pc3 三、测试 Hub相当于大家共享一条线路(类似于电线搭电)&#xff0c;线路上的所有的设备都会接收同样的信息。

【MySQL02】【 InnoDB 记录存储结构】

文章目录 一、前言二、InnoDB 行格式1. COMPACT 行格式1.1 记录的额外信息1.2 记录的真实数据1.3 综上 2. REDUNDANT 行格式2.1 字段长度偏移列表2.2 记录头信息 3. DYNAMIC 行格式和 COMPPESED 行格式 三、InnoDB 数据页结构1. File Header (文件头部)2. Page Header (页面头部…

搭建淘宝扭蛋机小程序:技术选型与最佳实践

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级应用&#xff0c;以其无需安装、即用即走的特点&#xff0c;受到了广大用户的喜爱。在电商领域&#xff0c;淘宝作为国内最大的电商平台之一&#xff0c;也积极拥抱小程序技术&#xff0c;为用户提供更加便捷、个性化…

纯CSS画浮动卡通蓝天白云草坪动画效果

文章目录 效果展示 背景效果实现效果展示HTML结构CSS样式 云效果实现效果展示HTML结构CSS样式 草效果实现单颗小草效果展示HTML结构CSS样式 组合小草效果展示HTML结构CSS样式 完整代码 在网页设计中&#xff0c;添加动态元素如浮动云朵可以为用户带来更加生动和自然的体验。虽然…

BeanDefinition作用

BeanDefinition接口 BeanDefinition 描述一个 Bean 实例&#xff0c;这个实例有哪些属性值、构造函数以及一些其他信息&#xff0c;就是描述Bean实例的信息。 BeanDefinition是一个接口&#xff0c;允许BeanFactoryPostProcessor 内省和修改属性值和其他 Bean 元数据。 点击了…

【simple-admin】simple-admin-core 首次服务启动 如何配置mysql数据库表 | 如何docker启动core

一、下载启动S-A 1、下载源码 https://github.com/suyuan32/simple-admin-core.git git clone https://github.com/suyuan32/simple-admin-core.git2、修改etc下yaml配置 需要对RPC和API 分别2个文件夹下的etc下的yaml进行修改 替换成我们的数据库 3、初始化数据库 核心代…

芯课堂 | UI Creator 物理键盘移植指南

LVGL提供输入设备的种类一共有5种&#xff0c;分别是&#xff1a;touchpad&#xff08;触摸板&#xff09;、mouse&#xff08;鼠标&#xff09;、keypad&#xff08;键盘&#xff09;、encoder&#xff08;编码器&#xff09;、button&#xff08;外部按键&#xff09;。而基于…

抖音直播预告|换新·升级 Aigtek安泰电子2024新产品发布会

多系列功放产品大升级&#xff01; 深耕电子测试仪器领域&#xff0c;攻坚行业尖端技术&#xff0c;不断自主研发与创新&#xff0c;是安泰电子一如既往的坚持&#xff01;通过长久技术积淀&#xff0c;Aigtek安泰电子多系列功放也在2024年迎来了全新升级&#xff01; 本次我们…

青年精英大会笔记

2024年5月16日上午 大会主席致辞【郑纬民】 郑纬民【清华大学教授、中国工程院院士】——78岁【看着精神抖擞】&#xff01;牛哇 学件初步探索【周志华】 南京大学 zhouzhnju.edu.cn Preliminary Exploration to Learnware 土生土长的 听完介绍感觉这个研究工作很不错&…

go语言中的一个特别的语法 //go:embed 可将将静态文件内容读取到string, []byte和 embed.FS 变量并直接打包到exe包中

go语言中的一个特别的语法 //go:embed 看上去像是注释&#xff0c;实则是golang中的一个内置的语法&#xff0c;而且是仅在你的go代码编译时生效的语法&#xff0c; 借助他我们可以将我们的静态资源文件读取到FS直接打包到我们的exe执行文件中。 同时他还支持文件的模式匹配…

揭秘未来,开启盲盒新篇章——打造你的专属盲盒小程序

一、引言 在这个充满未知与惊喜的时代&#xff0c;盲盒文化已经深入人心&#xff0c;成为年轻人追求新奇、体验刺激的新宠。如今&#xff0c;随着科技的快速发展&#xff0c;盲盒文化也迎来了全新的发展机遇。我们诚挚地邀请您一同踏上这场盲盒小程序开发的旅程&#xff0c;共…

通用代码生成器应用场景一,项目前期

通用代码生成器是一种自动化编程软件&#xff0c;是一种先进的编译系统。它具有表级抽象。把系统抽象为域对象&#xff0c;枚举&#xff0c;弹性登录模块&#xff0c;复杂版面和图形报表。使用通用代码生成器完成项目前期&#xff0c;比直接使用对应的高级语言快的多&#xff0…

秋招突击——算法打卡——5/24——两数之和

题目描述 实现代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int addNumber 0;// 表示进位ListNode* res ListNode();ListNode* curNode res;while(l1 && l2){curNode.value (l1.value l2.value addNumber) % 10 addNumber (l1.value l2.value…

当消费遇上AI:大模型如何成为行业“网红”?

在一个繁忙过后的周五晚上&#xff0c;美食发烧友Melissa和朋友痛快的享受了一顿海底捞火锅&#xff0c;餐毕&#xff0c;她像往常一样留下了服务评价&#xff0c;及时反馈是一位美食家的基本素养。 每天如同Melissa一样留下评价的客人不在少数&#xff0c;他们的真实体验反馈…

软件测试/测试开发丨学习笔记之Allure2测试报告

Allure2测试报告 1、使用 Allure2 运行方式-Python 1&#xff09;–alluredir 参数生成测试报告。 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径)#生成在线的测试报告 allure serve ./result2…

EXPLAIN执行计划详解

EXPLAIN 是 MySQL 中的一个非常实用的命令&#xff0c;主要用于分析 SQL 查询语句的执行计划&#xff08;Query Execution Plan&#xff0c;QEP&#xff09;。通过这个命令&#xff0c;用户可以获取到数据库引擎如何执行特定的 SQL 语句的详细信息&#xff0c;这对于优化查询性…

我是如何使用 Next.js14 + Tailwindcss 重构个人项目的

前言 去年在学习 React 和 Nest 的时候&#xff0c;参考了大佬 imsyy 的项目 DailyHot&#xff0c;以此项目的灵感基于 React 开发&#xff0c;完成之后就没怎么在意。 后来发现这个项目还有点小流量&#xff0c;每天差不多 200-400 的 IP 访问量&#xff1a; 我又抽时间优…