C++11实用技术(四)for循环该怎么写

news2024/10/6 4:08:13

普通用法

在C++遍历stl容器的方法通常是:

#include <iostream>
#include <vector>

int main() {
	std::vector<int> arr = {1, 2, 3};
	for (auto it = arr.begin(); it != arr.end(); ++it)
	{
		std::cout << *it << std::endl;
	}
	return 0;
}

上述代码需要关注迭代器,也需要显示得给出容器的begin和end。不便于书写。C++11支持基于范围的for循环。如下

C++11基于范围的for循环

C++11基于范围的for循环如下所示:

#include <iostream>
#include <vector>

int main() {
	std::vector<int> arr = {1, 2, 3};
	for (auto n : arr)
	{
		std::cout << n << std::endl;
	}
	return 0;
}

还可以使用引用修改容器的值:

#include <iostream>
#include <vector>

int main() {
	std::vector<int> arr = {1, 2, 3};
	for (auto& n : arr)
	{
		n++;
	}
	//n的值为2,3,4
	return 0;
}

map容器也支持:

#include <iostream>
#include <map>
#include <string>

int main() {
	std::map<std::string, int> mp = { {"1",1}, {"2", 2}, {"3", 3} };
	for (auto& n : mp)
	{
		std::cout << n.first << " -> " << n.second << std::endl;
	}
	return 0;
}

注意

但基于范围的for循环,在循环时不支持修改容器:
例如:

#include <iostream>
#include <vector>

int main() {
	std::vector<int> arr = { 1, 2, 3 };
	for (auto n : arr)
	{
		std::cout << n << std::endl;
		arr.push_back(4);//修改arr
	}
	return 0;
}

运行结果:
在这里插入图片描述
主要原因是上面for循环虽然没显式看到迭代器,但是其实等价于使用迭代器遍历容器的值,我们在循环时修改容器对象,就会修改迭代器,导致后续的遍历的值都混乱了。

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

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

相关文章

科东软件受邀参加第五届国产嵌入式操作系统技术与产业发展论坛

8月12日&#xff0c;第五届国产嵌入式操作系统技术与产业发展论坛暨嵌入式系统联谊会主题讨论会&#xff08;总第29次&#xff09;在杭州成功举行。这次论坛的主题是“面向异构多核智能芯片的混合关键系统研究与应用”&#xff0c;上午是“嵌入式异构多核智能芯片产业发展”的主…

kubernetes企业级高可用部署

目录 1、Kubernetes高可用项目介绍 2、项目架构设计 2.1、项目主机信息 2.2、项目架构图 1、Kubernetes高可用项目介绍 2、项目架构设计 2.1、项目主机信息 2.2、项目架构图 2.3、项目实施思路 3、项目实施过程 3.1、系统初始化 3.2、配置部署keepalived服务 3.3、…

【Redis基础篇】浅谈分布式系统(一)

一、浅谈分布式系统 1. 单机架构&#xff1a;只有一台服务器&#xff0c;这个服务器负责所有的工作。 如果遇到了服务器不够的场景怎么处理? 开源&#xff1a;增加更多的硬件资源节流&#xff1a;软件上的优化&#xff0c;优化代码等…一台服务器资源使用有限&#xff0c;就…

使用Mix-in类组合功能

为什么需要Mix-in? 在学习面向对象时我们知道&#xff0c;类可以通过继承类获得属性和方法&#xff0c;通过继承可以减少重复代码、提高复用率。Python支持多继承&#xff0c;一个类可以通过继承多个类来得到它们的功能。但多继承会带来一些问题&#xff0c;比如属性冲突。那…

AS报错:错误: 无效的源发行版:12

背景&#xff1a;今天用Android Studio 编译以前的demo,运行报错&#xff1a;错误: 无效的源发行版&#xff1a;12 截图如下&#xff1a; 解决办法&#xff1a;将jdk版本由11升级到13,解决了。 路径&#xff1a;Setting/Build,Execution,Deployment/Build Tools/Gradle/Gradl…

Python多线程与线程池(python线程池ThreadPoolExecutor)concurrent.futures高级别异步执行封装

文章目录 Python多线程与线程池一、Python多线程1.1 线程简介1.2 Python中的多线程1.3 GIL限制 二、线程池2.1 Python中的线程池 三、代码分析四、参考资料 Python多线程与线程池 一、Python多线程 在进行复杂的计算或处理大量数据时&#xff0c;可以通过创建多个线程来同时执…

MySQL卸载并重装指定版本

MySQL卸载并重装制定版本 学习新的项目&#xff0c;发现之前的Navicat已经失去了与现有MySQL的链接&#xff0c;而且版本也不适合&#xff0c;为了少走弯路&#xff0c;准备直接重装相应版本的MySQL 卸载现有MySQL 停止windows的MySQL服务&#xff0c;【windowsR】打开运行框…

电脑提示vcomp140.dll丢失怎样修复?vcomp140.dll的三种修复方法

vcomp140.dll是Microsoft Visual C所需的一个动态链接库文件&#xff0c;用于支持C并行编程。为了更好地理解为什么vcomp140.dll会丢失&#xff0c;并对其进行详细介绍&#xff0c;下面将详细解释以下几个方面&#xff1a; 动态链接库&#xff08;DLL&#xff09;的作用和原理…

SpringBoot系列之集成Resteasy实现RESTFul接口

JAX-RS&#xff1a;JavaAPI for RESTful Web Services&#xff0c;JAX-RS是可以用可以用于实现RESTFul应用程序的JAVA API&#xff0c;给开发者提供了一系列的RESTFul注解 EasyRest&#xff1a;这是Jboss开源的&#xff0c;一款用来定义实现RESTFul应用程序的框架&#xff0c;…

判断推理 -- 图形推理 -- 样式规律

上述题可以挑一两条线来看。 横着没规律可以竖着看&#xff0c;从上往下没规律可以从下往上。 黑白运算 从0点开始找&#xff0c;排除选项后找剩下选项不同的地方。 求异技巧很重要。

springcloud3 使用openfegin实现getpost请求调用

一 项目介绍 1.1 工程介绍 1.consumer9008 2.provider9009 二 get请求 2.1 消费端 1.controller 2.service 2.2 提供者 1.提供者 2.3 测试请求 地址&#xff1a; http://localhost:9008/consumer/payment/nacos/2223 三 post请求 3.1 消费者 3.2 提供者 3.3 测试请求…

前端打开后端返回的HTML格式的数据

前端打开后端返回的 HTML格式 的数据&#xff1a; 后端返回的数据格式如下示例&#xff1a; 前端通过 js 方式处理&#xff08;核心代码如下&#xff09; console.log(回调, path); // path 是后端返回的 HTML 格式数据// 必须要存进localstorage&#xff0c;否则会报错&am…

day 0815

计算文件有多少行&#xff1f; 2.文件的拷贝

InnoDB引擎

1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 1). 表空间 表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c; 如果用户启用了参数 innodb_file_per_table(在8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff09;&#xff0c;一个…

FreeRTOS qemu mps2-an385 bsp 移植制作 :环境搭建篇

开发环境 Win10 64位 VS Code&#xff0c;ssh 远程连接 ubuntu VMware Workstation Pro 16 Ubuntu 20.04 FreeRTOSv202212.01&#xff08;备注&#xff1a;可以在 github 获取最新版本&#xff09; qemu qemu-system-arm mps2-an385 开发板&#xff0c;qemu 版本 QEMU emu…

eNSP 配置交换机三种端口链路类型:Access、Trunk、Hybird

文章目录 1 概述1.1 总结&#xff1a;access、trunk、hybird 2 三种端口链路类型2.1 Access2.1.1 报文处理流程2.1.2 命令配置实验 2.2 Trunk2.2.1 报文处理流程2.2.2 命令配置实验 2.3 hybird2.3.1 报文处理流程2.3.2 命令配置实验 3 扩展3.1 查看 vlan 信息&#xff1a;displ…

实习机试代码记录

机试记录 2023-03-11 美团机试第一题第二题第三题第四题第五题 2023-03-12 拼多多机试第一题 多多的压缩编码II第二题 多多的飞机大战游戏第三题 多多的团建计划第四题 多多的餐厅客流量 2023-3-15 阿里机试第一题第二题第三题 2023-3-16 蚂蚁机试第一题 整数抽取第二题 组装电…

突破网络编程1024限制的方法(修改配置文件)

文章目录 概述修改linux配置相关命令步骤1. 打开终端2. 使用sudo权限编辑文件3. 添加资源限制配置4. 保存和退出5. 重启系统或重新登录 其他方法1. 使用事件驱动的框架2. 使用连接池3. 负载均衡4. 使用线程池和进程池5. 升级操作系统设置6. 使用专业的高性能服务器7. 分布式架构…

excel快速选择数据、选择性粘贴、冻结单元格

一、如何快速选择数据 在excel中&#xff0c;希望选择全部数据&#xff0c;通常使用鼠标选择数据然后往下拉&#xff0c;当数据很多时&#xff0c;也可单击单元格使用ctrl A选中全部数据&#xff0c;此外&#xff0c;具体介绍另一种方法。 操作&#xff1a;ctrl shift 方向…

6.RocketMQ之索引文件ConsumeQueue

本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface>> consumeQueueTable;public boolean load(…