首页 > 编程语言 >c++遍历容器元素

c++遍历容器元素

时间:2023-04-10 14:44:38浏览次数:49  
标签:容器 遍历 const auto 元素 c++ range 数组 拷贝

for(auto i : v)遍历容器元素

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;

其中,x xx 最初表示数组 prices 的第一个元素。显示第一个元素后,不断执行循环,而 x xx 依次表示数组的其他元素。因此,该循环可以用来显示数组中的每个值。

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

for (double &x : prices)
	x = x * 0.80; //20% off sale

符号 & 表明 x xx 是一个引用变量,能让接下来的代码能够修改数组的内容,而第一种语法不能。

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

for (int x : {3, 5, 2, 8, 6})
	cout << x << " ";
cout << '\n';

这种方式可以引申至 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),避免拷贝开销。

示例:

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,auto,元素,c++,range,数组,拷贝
From: https://www.cnblogs.com/drip3775/p/17302865.html

相关文章

  • Docker容器执行su命令报错su: cannot open session: Permission denied 解决方法
    1、先检查su命令权限是否正确,执行如下命令ll/etc/pam.d/su如果现实如图,则说明权限方面没问题,若您的执行结果与我的不一样,需调整权限。[root@blog-tag-gg~]#ll/etc/pam.d/su-rw-r--r--1rootroot5402月32021/etc/pam.d/su2、执行如下命令将如下。将su文......
  • C++标准输入输出
    一、问题引入关于C和C++的输入输出区别,虽然在C++中仍然可以使用scanf和printf,但建议使用cin和cout。虽然使用不同的函数得到的结果一样,但仔细检测发现,cin和cout没有格式控制符了,意味着输入更简单了二、解决过程#include<iostream>usingnamespacestd;intmain(......
  • C++指针
    指针指针的基本概念1、指针的作用:可以通过指针间接访问内存(指针就是内存地址)内存编号是从0开始记录的,一般用16进制数字表示可以利用指针变量保存地址指针变量定义的语法#include<iostream>usingnamespacestd;intmain(){ //1、定义指针 inta=10......
  • 86-云原生操作系统-Zookeeper集群业务容器化生产案例
    案例业务逻辑实现步骤构建zookeeper镜像#准备构建镜像的文件[root@K8s-ansiblezookeeper]#chmoda+x*.sh[root@K8s-ansiblezookeeper]#lltotal36900drwxr-xr-x4rootroot4096Apr913:47./drwxr-xr-x11rootroot4096Apr902:59../-rw-r--r--1ro......
  • C++-Ubuntu core dumped(核心已转储)-GDB调试
    C++-Ubuntucoredumped(核心已转储)-GDB调试Linux的可执行程序异常退出时,提示“核心已转储”。此时需要系统生成core文件,并通过GDB调试以确定问题。https://blog.csdn.net/scjdas/article/details/128585787设置系统生成core文件用ulimit-a查看corefilesize项是否......
  • C/C++模拟校园卡消费记录查询系统[2023-04-09]
    C/C++模拟校园卡消费记录查询系统[2023-04-09]模拟校园卡1问题描述同学们都在机房做实验或自由上机,请根据自己实际使用情况编写一份模拟校园卡消费记录查询系统,实现登录,计费,挂失,统计等相关功能。2功能要求主要功能模块:(1)登录模块:同学根据自己设定的密码登录。三次错误则......
  • 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 08.创建主HUD & 自定义作弊指令
    斯坦福课程UE4C++ActionRoguelike游戏实例教程0.绪论概述本篇文章对应课程Lecture14,56-58节。本篇文章将会教你将之前创建的各种UMG控件统合到一个主控件上。此外,还会教你如何在C++中创建自定义作弊指令,并在游戏中使用控制台执行它。目录创建主HUD使用GameMode生成玩......
  • 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 09.第二个游戏规则:玩家重生
    斯坦福课程UE4C++ActionRoguelike游戏实例教程0.绪论概述本文对应课程15章,60-RefiningPlayerRespawns。在本篇文章中,将会为游戏新增加一个规则,即玩家可以自动产卵,呸,自动重生。设定玩家重生在之前的课程中,我们使用GameMode为游戏添加了第一个规则,即自动生成AI小兵。在......
  • Python同Java及C++的不同之处
    Python同Java及C++的不同之处1.C++、Java对变量的定义很严格比如inta=0python则直接定义a=02.C++、Java代码结束时需要用;隔开比如inta=0;,而python则不用a=0直接换行即可3.C++、Java中的循环或者判断需要用{}括起来for(i=0;i<5;i++){},python使用:forii......
  • 2023第14届蓝桥杯C/C++A组参赛记录+部分题解
    比赛记录早上起得还算早,没吃早餐,我吃早餐会瞌睡,也会变蠢。在门口还没来得及和队里其他同学聊几句就进场了......键盘还是一样的难用,软件有codeblocks和dev,很舒服。今年来参加蓝桥杯的人好多啊......女生也好多。听说今年蓝桥杯有统一的正经培训,不过和我这个被踢出蓝桥杯群的......