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

2023-11-10

普通用法

在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循环虽然没显式看到迭代器,但是其实等价于使用迭代器遍历容器的值,我们在循环时修改容器对象,就会修改迭代器,导致后续的遍历的值都混乱了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11实用技术(四)for循环该怎么写 的相关文章

  • 数字或货币的字符串格式?

    我需要为每个千给出逗号 所以我用了DataFormatString 0 它运行良好 但当值为0 它正在显示 00 我只想只显示 0 我们怎样才能做到这一点 DataFormatString 0 C0 这将格式化为小数点后 0 位的货币 Da
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • 获取枚举实例的名称[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 假设我有这个枚举 public enum MyEnum ValueOne 1 ValueTwo 2 ValueThree 3 然后
  • 返回带有列表对象的列表对象

    我有三个表 汽车品牌 汽车型号 和 CarsandModel 我有 Carsand 模型表 因为一个模型可以由多个制造商构建 我想返回包含汽车型号列表的汽车品牌列表 我现在的长篇大论不是过滤汽车型号的汽车制造商列表 我尝试添加一个 wher
  • Swashbuckle 在 ASP.NET Core 中失败并出现 NotSupportedException 异常

    我跟着这个关于如何在我的 asp net core 2 2 项目中添加 swashbuckle 当我运行该项目时 我收到以下错误 处理请求时发生未处理的异常 NotSupportedException HTTP 方法 GET 和路径 id
  • 如何使用 LINQ 对列表的列表进行分组(例如:List>)

    我知道我可以使用一些 for 循环轻松地做到这一点 但想看看是否有一种方法可以使用流畅的 LINQ 来做到这一点 我试图找出每个子列表中有多少个 我在看Enumerable SequenceEqual http msdn microsoft
  • esp8266互联网交换机问题

    我正在尝试制作一个门继电器开关系统 我可以通过端口转发从任何地方进行操作 我找到了一个非常有用的指南和代码 我的程序基于 https openhomeautomation net control a lamp remotely using
  • 如何使用 Unity 动态注册通用类?

    我有一个包含很多类 300 和 BaseClass 的程序集 我想用接口注册一个泛型类 统一后 您必须在 Name如果你想解析接口的对象数组 我想要一个对象数组主视图模型自动地 有没有办法通过反射来自动执行此操作 有什么建议么 示例 伪 p
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • 在.NET MVC中,有没有一种简单的方法来检查我是否在主页上?

    如果用户从主页登录 我需要采取特定的操作 在我的 LogOnModel 中 我有一个隐藏字段 Html Hidden returnUrl Request Url AbsoluteUri 在我的控制器中 我需要检查该值是否是主页 在下面的示例
  • 我们还需要迭代器设计模式吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MSVC如何在编译期间输出一些内容到“输出”窗口

    有时我看到某些项目在编译期间向输出写入一些内容 在MSVC 中如何实现 thanks use pragma message e g define MESSAGE t message FILE STRINGXXX LINE t define
  • Windows 中的蓝牙 AVRCP 命令会触发哪些事件

    可以这么说 只是在做一些高级侦察 对于我的潘多拉客户 Elpis http elpis adamhaile net 我支持全局媒体键 键盘上的 MediaPlayPause MediaNext 等 并且我希望能够支持AVRCP http e
  • 如何将 .ashx 处理程序与 asp:Image 对象一起使用?

    我有一个 ashx 处理程序 using System using System Web public class Thumbnail IHttpHandler public void ProcessRequest HttpContext
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不
  • 如何将curlpp 添加到我的项目中?

    我正在尝试从 vb net 过渡到 C 但我陷入了困境 我从下载了curpp这给了我一个 dll exp 和 lib 文件 我将包含这 3 个文件的目录添加到项目属性中的 附加库目录 链接器 gt 常规 接下来 我将 ws2 32 lib
  • (int *)0 是空指针吗?

    这可以被认为是一个扩展这个问题 https stackoverflow com q 16563114 912144 我只对 C 感兴趣 但添加 C 来完成扩展 C11 标准 6 3 2 3 3 规定 值为 0 的整数常量表达式 或此类表达式
  • 如何让浏览器后退按钮通过 AJAX 调用带您返回?

    我有一个页面 上面有很多动态生成的复选框 当用户单击这些复选框时 页面上的许多内容会通过 ajax 动态更改 最终用户抱怨 在点击提交然后点击后退按钮更改某些内容后 他们的选择被破坏了 他们必须重新做一遍 我见过一些网站 gmail fac
  • 如何在 C# 中使用 Selenium WebDriver 获取当前窗口的 URL?

    在我的应用程序中 登录时 它会导航到另一个页面 现在我需要在 selenium C 中使用 WebDriver 获取新的 URL 我找不到任何函数来执行此操作 我努力了driver Url driver getLocation and dr
  • 同时使用多个控制台

    是否有捷径可寻 我现在仅使用控制台测试我的网络应用程序 最好的办法是从一个项目中拥有多个控制台 然后按一下 立即调试 菜单项 我可以像过去一样使用多个项目 但这似乎很笨拙 理想情况下 我可以启动多个控制台实例 从同一线程运行很好 并且让它们

随机推荐

  • 赏析

    2017年秀H5赏析 排名不分先后 尽可能多得挑选了不同展现形式 或是不同行业的案例 点击相应的图片即可查看案例 本文适合手机端浏览 人 工 智 能 类 点击图片进入案例 美图秀秀 妙啊 史上最奇妙的圣诞祝福 点评 这个特别好玩 任意上传一
  • Jar的远程调试【java的远程调试Debug】

    什么是远程调试 什么是远程调试 我们使用IDEA本地的时候运行可以打本地的Debug 但是若我们的服务在线上呢 我们的服务部署到了服务器上面 比如服务器的IP为 127 0 0 1接下来我们开始远程调试 Jar包的启动命令 前面一直到 ja
  • 数据挖掘算法总结

    原文链接 http qing blog sina com cn tj 591d4f4933002uc9 html 数据挖掘的算法有很多种 我们经常会疑虑到底用哪种方法最合适 所以专门收集了常见的数据挖掘算法 让大家有一个总体的了解 一 聚类
  • Anaconda详细安装教程!!

    1 Anaconda下载 方法一 官网安装 直接点击Download即可 可自行选择Windows 64位或32位的版本进行下载 方法二 可以选择清华大学开源软件镜像站下载 2 详细安装步骤 1 双击完成后的安装包 2 点击Next 3 点
  • 查看通过Windows凭证查看浏览器保存的密码

    1 打开控制面板 2 打开凭据管理器
  • 贝叶斯优化神经网络参数_贝叶斯超参数优化:神经网络,TensorFlow,相预测示例

    贝叶斯优化神经网络参数 The purpose of this work is to optimize the neural network model hyper parameters to estimate facies classes
  • SpringBoot整合Redis

    要在Spring Boot中整合Redis 可以按照以下步骤进行操作 一 在pom xml文件中添加Redis的依赖
  • 轻舟已过万重山

    罗翔说 其实没什么好后悔的 很多事就算时间能重来一遍 以当时的心智和阅历 还是会做同样的选择 避免不了同样的结果 人本来就是在失败中学乖的 与其抱着过去后悔 不如擦擦眼泪向前走吧 我时常在想 我是过了365天 还是把一天过了365遍 这种一
  • 修改bug的一个小故事

    今天在网站上看见一个故事 很有趣 但也值得思考 那还是80年代初期 我爸爸在一家存储设备公司工作 这个公司现在已经不存在了 它生产磁带机和驱动这些磁带高速运转的气动系统 这是那个时代的产物 他们技术改造了磁带驱动器 使得你可以只有一个中心驱
  • HAProxy--理论--01--简介

    HAProxy 理论 01 简介 1 HAProxy 是一款提供高可用性 负载均衡以及基于TCP 第四层 和HTTP 第七层 应用的代理软件 支持虚拟主机 它是免费的 适用于那些负载特大的web站点 这些站点通常又需要会话保持或七层处理 H
  • 模拟实现strchar函数

    strchar 查找字符串 s 中首次出现字符 c 的位置 函数实现 char my strchar const char str char c assert str while str if str c return str else s
  • STL(二) map容器插入、删除小技巧

    这里写目录标题 STL 二 map容器插入 删除小技巧 一 map插入 1 用数组方式插入数据 2 在insert函数中使用make pair 函数 3 插入前先查找该key值 是否已存在 4 insert or assign直接插入 如果
  • VueJS 中的动画菜单效果的实现

    英文 https mattmaribojoc medium com animated active menu highlights in vuejs daily vue tips 1 accd47fac612 最近 我在写一个项目 我想要一
  • 解决springboot2.x集成redis节点故障redisTemplate报错redis Command timed out

    pringboot2 x集成redis redis节点故障 集群状态ok的情况下 程序使用redisTemplate操作redis一直报错 Redis command timed out nested exception is io let
  • 若依框架注册功能的实现并且给分配菜单可见菜单权限

    前端设置 打开 ruoyi ui 模块 然后 找到 views 文件夹 然后找到 login vue 文件 在 94 行左右的位置 找到 register 属性 将其从 false 改为 true 后端设置 找到数据库中的sys confi
  • flutter mac 环境变量配置

    open bash profile export FLUTTER ROOT Applications flutter export PUB HOSTED URL https pub flutter io cn export FLUTTER
  • MySQL数据库基础知识9,InnoDB和MyISAM的数据分布对比

    目录 一 InnoDB存储引擎 二 MyISAM存储引擎 1 MyISAM简介 2 MyISAM压缩表 三 InnoDB的数据分布 四 MyISAM数据分布 五 顺序的主键什么时候会造成更坏的结果 MySQL进阶实战系列文章 哪吒精品系列文
  • Jupyter notebook项目文件默认路径更改(win10,Anaconda)

    Jupyter notebook项目文件默认路径更改 问题描述 解决方法 参考 问题描述 在jupyter notebook中 其默认文件路径是保存在C盘的C Users xxx路径当中 这会导致入门小白被jupyter中许多文件夹搞得云里
  • matlab如何提取某一列的数据_MATLAB如何提取某一矩阵的某一列的部分数据?

    展开全部 使用2113a M N 可以提取矩阵a中符合5261M 4102N要求的部分 最简单1653是M N都是标量 就是一回个数例如 答 a 1 1 a 2 3 分别返回a矩阵1行1列的单元 和 2行3列的单元 M N还可以是矢量 例如
  • C++11实用技术(四)for循环该怎么写

    普通用法 在C 遍历stl容器的方法通常是 include