C++中auto关键字和for循环使用详解——for (auto a:b)

编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。

C++中。的auto关键字是一个类型说明符,通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。C++11新标准引入了auto 类型说明符,让编译器去分析表达式的类型。和原来那些只对应一种特定类型的说明符(比如double)不同,auto让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值(与C语言中的auto定义变量不一样)例如:

//由val1和val2相加的结果可以推断出item的类型
auto item = val1 + val2;//item初始化为val1和val2相加的结果

     使用auto也能在一条语句中声明多个变量。因为一条语句声明时只能有一种基本数据类型,所以该语句中的所有变量初始基本数据类型必须一样,例如:

auto i = 0, *p = &i;        //正确:i是整数、p是整形指针
auto sz = 0, pi = 3, 14;    //错误:sz和pi的类型不一致

另外:在范围for语句中,经常会使用到auto关键字,常用的两种方式

for( auto a:b)for( auto  &a:b)的区别如下

#include<iostream>
using  namespace  std;
int  main()
{
     string  s( "hello world" );
     for (auto c:s)
     c= 't' ;
     cout<<s<<endl; //结果为hello world
     for (auto &c:s)
     c= 't' ;
     cout<<s<<endl;  //结果为ttttttttttt
}

for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。

for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。



参考文章:https://blog.csdn.net/LiuBo_01/article/details/80752734

                  https://blog.csdn.net/weixin_40710375/article/details/80606062?

                  https://blog.csdn.net/qq_33651375/article/details/100132884?

  • 21
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这段代码是使用 C++11 的 range-based for 循环语法,它遍历了一个名为 b 的容器,并将每个元素赋值给变量 e,然后执行循环体内的代码。这个语法比传统的 for 循环语法更加简洁明了,可以方便地遍历各种容器类型,如 vector、array、map 等等。 ### 回答2: for(auto e:b)是C++11引入的范围for循环语句的语法形式之一。它被用来遍历容器b的元素,并将每个元素赋值给迭代变量e。其auto关键字用于自动推导迭代变量e的类型,b是一个容器对象。 范围for循环的语法形式为:for(auto e:b),其e是迭代变量名,b是要遍历的容器对象名。 执行该循环时,会自动遍历容器b的每个元素,并将当前元素依次赋值给迭代变量e。在循环,可以通过迭代变量e来操作当前元素。 使用范围for循环可以简化遍历容器的代码,特别适合处理容器的每个元素,不需要索引或迭代器的情况。 例如,如果容器b是一个整型数组,可以使用范围for循环来遍历数组的元素,并对每个元素进行处理。 ```cpp int b[] = {1, 2, 3, 4, 5}; for(auto e : b){ // 对每个元素进行处理 std::cout << e << " "; } ``` 以上代码将输出数组b的每个元素:1 2 3 4 5。在循环,可以通过迭代变量e来访问当前元素的值。 ### 回答3: 对于这个问题,c的"for(auto e:b)"是用于遍历一个名为b的容器的语法结构。这个语法结构被称为范围for循环。在循环的每次迭代,元素e被依次赋值为b容器的每个元素。它能够更简洁地遍历容器,省去了使用迭代器或下标的麻烦。 例如,如果b是一个数组,"for(auto e:b)"将会遍历数组b的每个元素,并依次将其赋值给e。可以在循环体内对e进行操作或输出。 这个语法结构也适用于其他类型的容器,比如向量、列表、集合等。无论容器包含的是整数、浮点数、字符串或自定义的类型,都可以使用"for(auto e:b)"来遍历它们。 需要注意的是,范围for循环并不会改变容器元素的值,它只是将每个元素临时赋值给变量e。如果需要修改容器的元素,可以使用引用类型作为循环变量,例如"for(auto& e:b)"。 总之,c的"for(auto e:b)"是一种简洁方便的语法结构,用于遍历容器的元素,并在循环体内进行操作或输出。无论容器包含什么类型的元素,都可以使用这种方式来实现遍历。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值