for(auto count : counts)

c++中 for(auto count : counts)

auto是声明自动变量格式为for(元素类型 遍历值:数组/容器),之所以用auto是可以根据赋值自动推导出变量类型。

auto是c++程序设计语言的关键字。用于两种情况

(1)声明变量时根据初始化表达式自动推断该变量的类型

(2)声明函数时函数返回值的占位符

意思是将 counts 容器中的每一个元素从前往后枚举出来,并用 count 来表示,类似于Java中的 for each 语句:

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

运行的效果是:

在这里插入图片描述

这是C++11中的语法,即:Range-based for loop。其中counts应满足:begin(counts),end(counts)是合法的。

因此,它等价于for(some_iterator p = begin(counts); p != end(counts);
++p)且some_type count = *p。

for(auto x : range)
创建拷贝,无法修改range中的元素

for(auto& x : range)
可以修改range中的元素

下面是一个例子:

c++11的特性,v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素。

for(auto i:v)
for(auto &i:v)

代码1:for(auto &i:v)

#include<iostream>
#include<string>
using namespace std;
string s = "hello";
for (auto &i : s ) //i是个引用 
i = toupper(i); //改变成大写,影响s的值
cout<<s<<endl; //s的值是 HELLO

代码2:for(auto i:v)

#include<iostream>
#include<string>
using namespace std;
string s = "hello";
for (auto i : s ) //i 是char类型
i = toupper(i); //改变成大写,不影响s的值
cout<<s<<endl; //s的值是 hello

for(auto&& count: counts),其与for(auto& count:counts)的区别在于auto的推导是否受初始化值的影响。

auto&& 的推导收到初始化值的 value category 的影响。用左值初始化,推导得结果是一个左值引用;否则是一个右值引用。

auto& 的推导与初始化值的 value category 无关。

官网解释:

在这里插入图片描述
以上语法生成的代码等效于以下代码(_ _ range、 _ _ start 和 _ _ end 仅用于公开) :
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yitahutu79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值