首页 > 其他分享 >2023-4-18补缺for(auto i : v)遍历容器元素

2023-4-18补缺for(auto i : v)遍历容器元素

时间:2023-04-18 19:46:05浏览次数:41  
标签:const cout auto 元素 18 range 数组 2023

for(auto i: v)遍历容器元素
1. auto
2. auto&
3. const auto&
4. const auto
C++11 新增了一种循环:基于范围(range-based)的 for 循环。这简化了一种常见的循环任务:对数组(或容器类,如 vector 和 array)的每个元素执行相同的操作,如下例所示:

double prices[5] = {4.99, 10.99, 6.87, 6.47, 8.88};
for (double x : prices)
std::cout << x << std::endl;
1
2
3
其中,x xx 最初表示数组 prices 的第一个元素。显示第一个元素后,不断执行循环,而 x xx 依次表示数组的其他元素。因此,该循环可以用来显示数组中的每个值。

要修改数组的元素,需要使用不同的循环变量语法:

for (double &x : prices)
x = x * 0.80; //20% off sale
1
2
符号 & 表明 x xx 是一个引用变量,能让接下来的代码能够修改数组的内容,而第一种语法不能。

还可结合使用基于范围的 for 循环和初始化列表:

for (int x : {3, 5, 2, 8, 6})
cout << x << " ";
cout << '\n';
1
2
3
这种方式可以引申至 C++11 的另一种新特性 auto,使用 auto 遍历容器的方式,有以下几种:

1. auto
auto 即 for(auto x: range) 这样会拷贝一份 range 元素,而不会改变 range 中元素;

2. auto&
当需要修改range中元素,用 for(auto& x: range);

3. const auto&
当只想读取 range 中元素时,使用 const auto&,如:for(const auto&x:range),它不会进行拷贝,也不会修改range;

4. const auto
当需要拷贝元素,但不可修改拷贝出来的值时,使用 for(const auto x:range),避免拷贝开销。

示例:

#include<iostream>
#include<vector>
using namespace std;
int main() {
int a[] = { 1,2,3,5,2,0 };
vector<int>counts(a,a+6);
for (auto count : counts)
cout<< count<< " ";
cout << endl;
return 0;
}
//输出:1 2 3 5 2 0

标签:const,cout,auto,元素,18,range,数组,2023
From: https://www.cnblogs.com/LianIsFlying/p/17330838.html

相关文章

  • 2023.4.18-人月神话-4月份读后感1
    最近,我阅读了人月神话的一部分,有了一些感受。过去,我对于编程的乐趣不是很了解。编程为什么有趣?首先是一种创建事务的纯粹快乐,其次快乐来自于开发对其他人有用的东西,第三是整个过程体现出魔术般的力量,第四是学习的乐趣,最后乐趣还来自于工作在如此易于驾驭的介质上。编程非常有趣,在......
  • 2023 ASP.NET Core 开发者路线图
    链接ASP.NETCoreDeveloperRoadmap......
  • Codeforces 1810G - The Maximum Prefix(DP)
    挺小清新的一道计数题。首先先分析下这个“最大前缀和”,按照最朴素的思路就是扫一遍每个前缀,然后记录一下当前的\(sum\)与前面的\(mx\),但是如果你一直陷在这个思路上你就似了,因为按照这个思路做,你DP状态里需要记录\(sum\)和\(mx\)两个维度,算上下标一维总共是\(n^3\),并......
  • 4.18打卡
       2.设计思路      ①.定义A,B,C      ②套入循环,先让A选择一本书      ③在A选完书的前提下让B选择一本书      ④在A和B选完书的前提下让C选择一本书      ⑤将A,B,C分别选择的值输出,代表分别选择的书; #include<bits/stdc++.h>......
  • 【愚公系列】2023年04月 .NET CORE工具案例-DeveloperSharp的使用(数据库)
    (文章目录)前言DeveloperSharp是一个研发中大型项目必备的系统平台。也是一个低代码平台。它主要包括了如下一些功能:基于Sql语句、存储过程、事务、分页的数据库操作。并几乎支持市面上所有种类的数据库。图片操作。裁剪、缩放、加水印。http请求调用(Post与Get)高效分页We......
  • 4.18SCRUM个人博客
    昨天的成就:完成对用户账单的修改和删除,花了大概俩小时遇到什么困难:删除后listview界面不能同步更新今天的任务:修复添加和删除账单后不能同步更新的bug ......
  • 归档 230418 // 补题
    凳子充分地让我切身实地地体会到了平行四边形的不稳定性。做题的时候可以360°无死角地把下半身转来转去,有点意思。也有点容易摔(×A.两双手http://222.180.160.110:1024/contest/3506/problem/1不难发现可以通过解二元一次方程组得到用几个A操作和B操作才能让横纵坐标分......
  • 生信0418
    生信包括哪些内容:生物信息学是一门涉及多个学科的学科,其包括以下几个主要内容:生物信息学基础知识:包括生物学、计算机科学、统计学和数学等基础学科的知识,例如生物分子的结构和功能、算法和数据结构、概率论和统计学等。基因组学:研究基因组的组成、结构、功能和演化,涉及到基......
  • 2023五一杯数学建模ABC思路分析
    0赛题思路(赛题出来以后第一时间分享)企鹅qun7144526211竞赛信息数学建模竞赛是一项模拟面对实际问题寻求解决方案的活动,是一次近似于“真刀真枪”的创新探索性实践训练。在丰富并活跃学生课外生活活动的同时,数学建模竞赛有助于训练学生的想象力、洞察力和创造力,有助于培养......
  • mvc5中使用autofac注册SignalR
    1.引用autofac.SignalR 2.Startup publicvoidConfiguration(IAppBuilderapp){DependencyConfig.RegisterDependencies(app);}3.RegisterDependencies//RegisteryourSignalRhubs.builder.RegisterHubs(Assembly.GetExecutingAssembly());var......