当前位置: 首页 > news >正文

【C/C++】范围for循环

📘 C++ 范围 for 循环详解(Range-based for loop)


一、什么是范围 for 循环?

范围 for 循环(Range-based for loop) 是 C++11 引入的一种简化容器/数组遍历的方式。它通过自动调用容器的 begin()end() 方法,实现对每个元素的遍历,无需手动管理索引或迭代器


二、语法格式

for (declaration : expression) {// 循环体
}
  • declaration:用于声明当前遍历的元素(可使用 auto 自动推导类型)
  • expression:表示要遍历的容器或数组

三、基本原理

✅ 自动调用 begin()end()

范围 for 循环会自动调用容器的 begin()end() 方法,获取起始和结束迭代器,然后依次遍历每个元素。

示例说明:
std::vector<int> numbers = {1, 2, 3, 4, 5};for (int num : numbers) {std::cout << num << " ";
}
✅ 等价于传统写法:
std::vector<int> numbers = {1, 2, 3, 4, 5};for (auto it = numbers.begin(); it != numbers.end(); ++it) {int num = *it;std::cout << num << " ";
}

四、适用对象

范围 for 循环适用于以下对象:

类型是否支持示例
数组✅ 支持int arr[] = {1, 2, 3};
标准库容器✅ 支持std::vector, std::list, std::map
自定义容器类✅ 支持需要实现 begin()end() 方法
字符串(std::string✅ 支持逐字符遍历
原始指针容器❌ 不支持没有 begin()/end() 方法

五、优点

优点说明
代码简洁避免手动写 begin()/end()
安全性高不易越界,适合只读遍历
可读性强更贴近自然语言,易于理解
自动类型推导可使用 auto 自动识别元素类型

六、局限性

局限说明
不能直接访问索引无法通过循环变量获取当前索引
不能反向遍历只能从前往后遍历
不能跳过元素无法控制步长(如 i += 2
不能修改容器结构不能在循环中添加/删除元素

七、代码示例

1. 遍历数组

int arr[] = {1, 2, 3, 4, 5};for (int num : arr) {std::cout << num << " ";
}
// 输出: 1 2 3 4 5

2. 遍历 std::vector

#include <iostream>
#include <vector>int main() {std::vector<int> nums = {10, 20, 30, 40, 50};for (auto num : nums) {std::cout << num << " ";}// 输出: 10 20 30 40 50return 0;
}

3. 遍历 std::map

#include <iostream>
#include <map>int main() {std::map<std::string, int> scores = {{"Alice", 95},{"Bob", 80},{"Charlie", 88}};for (const auto &pair : scores) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}

输出:

Alice: 95
Bob: 80
Charlie: 88

4. 遍历 std::string

#include <iostream>
#include <string>int main() {std::string str = "Hello";for (char c : str) {std::cout << c << " ";}// 输出: H e l l oreturn 0;
}

5. 使用引用修改元素

#include <iostream>
#include <vector>int main() {std::vector<int> nums = {1, 2, 3, 4, 5};for (auto &num : nums) {num *= 2;  // 修改原容器中的值}for (auto num : nums) {std::cout << num << " ";}// 输出: 2 4 6 8 10return 0;
}

6. 使用 auto 自动推导类型

#include <iostream>
#include <vector>int main() {std::vector<std::string> names = {"Tom", "Jerry", "Spike"};for (const auto &name : names) {std::cout << name << std::endl;}return 0;
}

八、常见错误与修正

错误写法正确写法说明
for (int x : 10)for (int x : vector)范围 for 必须作用于容器
for (int x : {});std::vector<int> v = {1, 2}; for (int x : v)空列表不能单独使用
for (int &x : const std::vector<int> v)for (int x : v)不能通过引用修改常量容器
for (int x : arr, arr + 5)for (int x : arr)不需要手动指定范围,自动识别容器边界

九、性能与安全建议

建议说明
使用 const auto & 遍历只读容器避免拷贝,提高性能
使用 auto & 修改容器元素通过引用直接操作原数据
避免在循环中修改容器结构push_back()erase(),可能导致迭代器失效
优先使用 const如果不打算修改元素,使用 const auto & 提高代码清晰度

十、通俗类比

你可以把范围 for 循环理解为:

for (auto &item : shopping_list) {std::cout << "Buy: " << item << std::endl;
}
  • shopping_list 是你要遍历的容器
  • item 是当前遍历到的元素
  • 循环自动帮你“取出”每一个物品,不需要你手动操作索引或指针

十一、术语对照表

英文术语中文解释
Range-based for loop范围 for 循环
Container容器(如 vector, map
Iterator迭代器(传统 for 循环中使用)
Reference引用(& 表示)
auto自动类型推导
const auto &常量引用,防止拷贝和修改原始数据

十二、设计建议

场景推荐写法
只读遍历容器for (const auto &item : container)
修改容器元素for (auto &item : container)
遍历字符串for (char c : str)
遍历 map 的键值对for (const auto &pair : my_map)
避免拷贝使用引用 &
避免修改容器结构不在循环中调用 push_back()erase() 等方法

十三、总结

特性说明
语法简洁for (auto &item : container)
自动调用 begin() / end()无需手动写迭代器
适用于容器和数组vector, map, array, string
不能控制索引无法获取当前索引值
不适合动态修改容器如增删元素会导致迭代器失效

相关文章:

【C/C++】范围for循环

&#x1f4d8; C 范围 for 循环详解&#xff08;Range-based for loop&#xff09; 一、什么是范围 for 循环&#xff1f; 范围 for 循环&#xff08;Range-based for loop&#xff09; 是 C11 引入的一种简化容器/数组遍历的方式。它通过自动调用容器的 begin() 和 end() 方法…...

嵌入式开发学习(第二阶段 C语言基础)

C语言&#xff1a;第4天笔记 内容提要 流程控制 C语句数据的输入与输出 流程控制 C语句 定义 C程序是以函数为基础单位的。一个函数的执行部分是由若干条语句构成的。C语言都是用来完成一定操作的任务。C语句必须依赖于函数存在。 C程序结构 C语句分类 1.控制语句 作…...

大物重修之浅显知识点

第一章 质点运动学 例1 知识点公式如下&#xff1a; 例2 例3 例4 例5 例6 第四章 刚体的转动 例1 例2 例3 例4 例5 例6 第五章 简谐振动 例1 例2 例3 第六章 机械波 第八章 热力学基础 第九章 静电场 第十一章 恒定磁场…...

随笔-近况

好久没写了&#xff0c;手都生了。 我写的东西可以分为两类&#xff1a;技术和随笔。当然技术没有我自己创新的&#xff0c;都是些在解决问题过程中查询了很多资料&#xff0c;经过验证后&#xff0c;可以在项目上使用的。但是自从 deepseek 出现后&#xff0c;问题一下子简单…...

赤色世界 陈默传 第一章 另一个陈默

赤色世界 陈默传 第一章 另一个陈默 陈默在一片纯白的空间中缓缓睁开眼睛。没有声音&#xff0c;没有光影的变化&#xff0c;只有无尽的空白包围着他&#xff0c;仿佛整个世界被擦去了所有的色彩和形状。他站在那里&#xff0c;赤脚踩在这片空无一物的地面上&#xff0c;却能感…...

isp流程介绍(yuv格式阶段)

一、前言介绍 前面两章里面&#xff0c;已经分别讲解了在Raw和Rgb域里面&#xff0c;ISP的相关算法流程&#xff0c;从前面文章里面可以看到&#xff0c;在Raw和Rgb域里面&#xff0c;很多ISP算法操作&#xff0c;更像是属于sensor矫正或者说sensor标定操作。本质上来说&#x…...

关于大数据的基础知识(一)——定义特征结构要素

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;一&a…...

C++(1):整数常量

目录 一、进制表示 二、后缀指定类型 三、示例与注意 四、总结表 一、进制表示 十进制&#xff08;Decimal&#xff09; 格式&#xff1a;无前缀&#xff0c;由数字 0-9 组成。 示例&#xff1a;123、42。 注意&#xff1a;不能以 0 开头&#xff08;否则会被视为八进制&a…...

C# NX二次开发:宏录制实战讲解(第一讲)

今天要讲的是关于NX软件录制宏操作的一些案例。 下面讲如何在NX软件中复制Part体的录制宏。 NXOpen.Session theSession NXOpen.Session.GetSession(); NXOpen.Part workPart theSession.Parts.Work; NXOpen.Part displayPart theSession.Parts.Display; NXOpe…...

C++:书架

【描述】 John最近买了一个书架用来存放奶牛养殖书籍&#xff0c;但书架很快被存满了&#xff0c;只剩最顶层有空余。 John共有N头奶牛(1 ≤ N ≤ 20,000)&#xff0c;每头奶牛有自己的高度Hi(1 ≤ Hi ≤ 10,000)&#xff0c;N头奶牛的总高度为S。书架高度为B(1 ≤ B ≤ S <…...

34.笔记1

今天&#xff0c;我们回顾回顾曾经的知识。 1.二分 还记得当初的二分吗&#xff1f; 1.一开始的二分 就像下面这个故事&#xff1a; 有一只老鼠&#xff0c;躲在10个大瓷瓶后面。你的任务就是抓住这只老鼠&#xff0c;但在抓的过程会导致你选择的大瓷瓶成为分子碎片。 如…...

智慧工会服务平台建设方案Word(23页)

1. 引言 随着信息技术的快速发展&#xff0c;传统工会服务模式面临挑战&#xff0c;智慧工会服务平台应运而生。该平台旨在通过数字化手段&#xff0c;整合工会资源&#xff0c;优化服务流程&#xff0c;提高工作效率&#xff0c;为会员提供更加便捷、高效、个性化的服务体验。…...

常见降维算法分析

一、常见的降维算法 LDA线性判别PCA主成分分析t-sne降维 二、降维算法原理 2.1 LDA 线性判别 原理 &#xff1a;LDA&#xff08;Linear Discriminant Analysis&#xff09;线性判别分析是一种有监督的降维方法。它的目标是找到一个投影方向&#xff0c;使得不同类别的数据在…...

洛谷 P1179【NOIP 2010 普及组】数字统计 —— 逐位计算

题面:P1179 [NOIP 2010 普及组] 数字统计 - 洛谷 一&#xff1a;题目解释&#xff1a; 需要求一区间内数字 2 的出现次数。注意22则记为 2 次&#xff0c;其它没别的... 二&#xff1a;思路、 思想可以考虑动态规划需要计算在每一位上数字 2 的出现次数&#xff0c;然后将这些…...

互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现-1

互联网大厂Java求职面试&#xff1a;基于RAG的智能问答系统设计与实现-1 场景背景 在某互联网大厂的技术面试中&#xff0c;技术总监张总正在面试一位名为郑薪苦的求职者。郑薪苦虽然对技术充满热情&#xff0c;但回答问题时总是带着幽默感&#xff0c;有时甚至让人哭笑不得。…...

学习黑客5 分钟读懂什么是 CVE?

5 分钟读懂什么是 CVE&#xff1f; ⏱️&#x1f510; 目标读者&#xff1a; 安全小白 风格&#xff1a; ***式清晰、循序渐进 篇幅&#xff1a; 5 分钟速读 &#x1f4d6; 目录 &#x1f680; 什么是 CVE&#xff1f;&#x1f914; 为什么要关注 CVE&#xff1f;&#x1f50d…...

SAM详解3.1(关于2和3的习题)

SAM SAMluogu5341SP8222SAM 推销一波前面的文章: SAM详解1 SAM详解2(初级应用) SAM详解3(SAM与AC自动机的相似性,SAM处理字符串匹配) luogu5341 题目链接 精简题意:给你一个字符串和 k k k,求 出现了 k k k 次的子串的长度 的出现次数 的最大值。 我们可以用 S…...

Java中医门诊系统源码 中医诊所系统源码

Java中医门诊系统源码 中医诊所系统源码 一、患者信息录入在中医问诊系统中&#xff0c;患者信息录入是第一步。系统会要求患者填写一些基本信息&#xff0c;如姓名、年龄、性别、职业等&#xff0c;以及一些关于健康状况的详细描述。这些信息将被系统自动保存&#xff0c;并用…...

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵...

RabittMQ-高级特性2-应用问题

文章目录 前言延迟队列介绍ttl死信队列存在问题延迟队列插件安装延迟插件使用事务消息分发概念介绍限流非公平分发&#xff08;负载均衡&#xff09; 限流负载均衡RabbitMQ应用问题-幂等性保障顺序性保障介绍1顺序性保障介绍2消息积压总结 前言 延迟队列介绍 延迟队列(Delaye…...

deep seek简介和解析

deepseek大合集&#xff0c;百度链接:https://pan.baidu.com/s/10EqPTg0dTat1UT6I-OlFtg?pwdw896 提取码:w896 一篇文章带你全面了解deep seek 目录 一、deep seek是什么 DeepSeek-R1开源推理模型&#xff0c;具有以下特点&#xff1a; 技术优势&#xff1a; 市场定位&…...

Webug4.0靶场通关笔记24- 第29关Webshell爆破

目录 一、Webshell爆破原理分析 二、第29关webshell爆破渗透实战 1.环境搭建 2.打开靶场 3.暴力破解 &#xff08;1&#xff09;bp开启抓包模式 &#xff08;2&#xff09;输入密码12并抓包 &#xff08;3&#xff09;配置position &#xff08;4&#xff09;配置payl…...

Linux系统入门第十一章 --Shell编程之函数与数组

一、Shell函数 1、函数的用法 Shell函数可用于存放一系列的指令。在Shell脚本执行的过程中&#xff0c;函数被置于内存中&#xff0c;每次调用函数时不需要从硬盘读取&#xff0c;因此运行的速度比较快。在Shell编程中函数并非是必须的元素&#xff0c;但使用函数可以对程序进…...

【文件系统—散列结构文件】

文章目录 一、实验目的实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解linux文件系统的内部技术&#xff0c;掌握linux与文件有关的系统调用命令&#xff0c;并在此基础上建立面向随机检索的散列结构文件&#xff1b;## 二、实验内容与设计思想 实验内容 1.设…...

软件系统中功能模型 vs 数据模型 对比解析

功能模型 vs 数据模型 对比解析 一、功能模型&#xff08;Functional Model&#xff09; 定义&#xff1a;描述系统 做什么&#xff08;业务逻辑与操作流程&#xff09; 核心关注&#xff1a;行为、交互、业务流程 建模工具&#xff1a; 用例图&#xff08;UML Use Case Dia…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(17):「 」と言いました

日语学习-日语知识点小记-构建基础-JLPT-N4阶段&#xff08;17&#xff09;&#xff1a;「 」と言いました 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰 2、知识点&#xff08;1&#xff09;复习&#xff08;&#xff12;&#xff09;「…...

qiankun微前端任意位置子应用

qiankun微前端任意位置子应用 主项目1、安装qiankun2、引入注册3、路由创建4、路由守卫 二、子项目1、安装sh-winter/vite-plugin-qiankun2、main.js配置3、vite.config.js配置 三、问题解决 主项目 1、安装qiankun npm i qiankun -S2、引入注册 创建存放子应用页面 //whpv…...

普通IT的股票交易成长史--20250509晚复盘

声明&#xff1a; 本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。价格行为理论学习可参考简介中的几位&#xff0c;感谢他们的无私奉献。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#xff01;&#xff01;&…...

切比雪夫不等式专题习题

切比雪夫不等式专题习题 前言 本文为概率论习题集专栏的切比雪夫不等式专题习题&#xff0c;共设计10道由浅入深的习题&#xff0c;涵盖基本概念、计算应用、理论证明与实际场景应用。建议先独立完成后再参考解析篇。 一、基础概念题 习题1&#xff1a; 判断题&#xff08;…...

JAVA包装类

一、基本数据类型 1.整型类型&#xff1a; 用于表示整数数值&#xff0c;不包含小数部分。 类型位数取值范围默认值示例byte8-128 至 1270byte num 100;short16-32,768 至 32,7670short num 5000;int32-2,147,483,648 至 2,147,483,6470int num 100000;long64-2^63 至 2^…...

[特征工程]机器学习-part2

1 特征工程概念 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 特征工程步骤…...

布隆过滤器:高效的数据结构与应用详解

引言 在处理大规模数据时&#xff0c;如何高效地判断某个元素是否存在于集合中是一个常见问题。传统的数据结构&#xff08;如哈希表&#xff09;虽然可以解决这一问题&#xff0c;但在存储空间和查询效率上可能存在瓶颈。布隆过滤器&#xff08;Bloom Filter&#xff09;作为…...

【免杀】C2免杀 | 概念篇

一、什么是 C2 ? Command and Control&#xff08;命令与控制&#xff09;的缩写&#xff0c;是指攻击者用来远程控制被入侵设备&#xff08;如计算机、服务器等&#xff09;的通信架构。C2 攻击 是指攻击者在目标系统中植入远程控制恶意软件&#xff08;如木马、僵尸网络、后…...

期刊论文写作注意点

下面给出关于期刊写作的几个关键注意点 一、摘要突出创新点 最重要的是论文的摘要&#xff0c;因为在论文送审的时候&#xff0c;编辑如果没有时间&#xff0c;最先看的就是摘要。摘要要写好。如果投的是顶刊&#xff0c;在摘要里面尽量不要写是在什么方法的基础上进行改进之类…...

范式之殇-关系代数与参照完整性在 Web 后台的落寞

最近参加了一个PostgreSQL相关的茶会&#xff0c;感慨良多。原本话题是PostgreSQL 在 SELECT 场景中凭借其成熟的查询优化器、丰富的功能特性和灵活的执行策略&#xff0c;展现出显著优势。在窗口函数&#xff08;Window Functions&#xff09;、JOIN 优化、公共表表达式&#…...

CST矩形喇叭建模

​本文介绍了在电磁仿真软件中创建喇叭天线模型的基本步骤。 点击工具栏的Basic Shapes > Brick创建两个长方体&#xff08;波导部分和喇叭横截面&#xff09; 点击相对的两个平面&#xff0c;选择Loft命令进行渐变连接 将三者boolen合并 挖去中间实体&#xff0c;先后选…...

Python MNE-Python 脑功能磁共振数据分析

一、什​​么​​是​​Python MNE-Python 脑​​功​​能​​磁​​共​​振​​数​​据​​分​​析 为大脑功能磁共振成像数据分析工具&#xff0c;致力于为神经科学研究提供便捷、高效的数据分析处理工具。MNE-Python提供了处理和分析脑电图&#xff08;EEG&#xff09;、…...

JVM之内存管理(一)

部分内容来源&#xff1a;JavaGuide二哥Java 图解JVM内存结构 内存管理快速复习 栈帧&#xff1a;局部变量表&#xff0c;动态链接&#xff08;符号引用转为真实引用&#xff09;&#xff0c;操作数栈&#xff08;存储中间结算结果&#xff09;&#xff0c;方法返回地址 运行时…...

【AI入门】CherryStudio入门7:引入魔搭中的MCP服务

前言 来吧&#xff0c;继续CherryStudio的实践&#xff0c;前边给Cherry Studio添加知识库&#xff0c;对接思源笔记&#xff0c;以及obsidian笔记&#xff0c;设置了mcp-auto-install 自动安装包服务&#xff0c;本节让我们把魔搭中的MCP服务同步过来&#x1f604;&#x1f6…...

高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」

以下是针对 FastAPI 的保姆级教程&#xff0c;包含核心概念、完整案例和关键注意事项&#xff0c;采用「基础 → 进阶 → 生产级」的三阶段教学法&#xff1a; 一、FastAPI介绍 FastAPI 是一个现代化的、高性能的 Python Web 框架&#xff0c;专门用于构建 APIs&#xff08;应…...

python小区物业管理系统-小区物业报修系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

YOLO数据集标注工具LabelImg(打包Exe版本及使用)

前言&#xff1a; 在计算机视觉领域&#xff0c;YOLO(You Only Look Once)系列算法因其出色的实时目标检测性能而广受欢迎。然而&#xff0c;要训练一个精准的YOLO模型&#xff0c;高质量的数据标注(labling)是不可或缺的基础工作。 LabelImage 是一个开源的图像标注工具&…...

【NCCL】DBT算法(double binary tree,双二叉树)

目录 前言 ring 不足&#xff0c;需要 tree 朴素二叉tree只利用了一半带宽&#xff0c;需要 双二叉 tree 双二叉树的构造 ringvs 双二叉树 测试 ring和tree的选择 nccl tree tree搜索 基本概念解释 最大化局部性构建二叉树的方式 这种构建方式的好处 示例说明 前言…...

Java大师成长计划之第16天:高级并发工具类

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在现代Java应用中&#xff0c;处理并…...

【C/C++】C语⾔内存函数

C语言内存函数 1. memcpy使用和模拟实现 memcpy可以代替strcpy void * memcpy ( void * destination, const void * source, size_t num );//void*来接受任意指针,size_t 单位是字节 //memcpy的头文件为<string.h> mem是memory的缩写 是内存的意思功能&#xff1a; …...

SQL JOIN 关联条件和 where 条件的异同

Inner join 对于 inner join&#xff0c;条件写到 on 和 where 部分是一样的。 select count(1) from web_site join web_page on web_site_skwp_web_page_id where web_cityPleasant Hill and wp_access_date_sk1;输出 0select count(1)from web_site join web_page on web…...

kotlin 数据类

一 kotlin数据类与java普通类区别 Kotlin 的 data class 与 Java 中的普通类&#xff08;POJO&#xff09;相比&#xff0c;确实大大减少了样板代码&#xff08;boilerplate&#xff09;&#xff0c;但它的优势不止于自动生成 getter/setter、copy()、equals()、toString()&am…...

云效 MCP Server:AI 驱动的研发协作新范式

作者&#xff1a;黄博文、李晔彬 云效 MCP Server 是什么&#xff1f; 云效 MCP&#xff08;Model Context Protocol&#xff09;是阿里云云效平台推出的模型上下文协议标准化接口系统&#xff0c;作为连接 AI 助手与 DevOps 平台的核心桥梁&#xff0c;通过模型上下文协议将…...

复合机器人案例启示:富唯智能如何以模块化创新引领工业自动化新标杆

在国产工业机器人加速突围的浪潮中&#xff0c;富唯智能复合机器人案例凭借其高精度焊接与智能控制技术&#xff0c;成为行业标杆。然而&#xff0c;随着制造业对柔性化、全场景协作需求的升级&#xff0c;复合机器人正从单一功能向多模态协同进化。作为这一领域的创新者&#…...

信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十三)(1)

个人笔记整理---仅供参考 信息系统项目理师-软考高级&#xff08;软考高项&#xff09;​​​​2025最新&#xff08;十三&#xff09;&#xff08;1&#xff09;第十三章项目资源管理 13.0资源管理概述 13.1管理基础 团队发展阶段背下来 13.2项目资源管理过程 13.3规划资源管...