范围for语句for auto详解(C++11新特性)
2021/10/13 11:14:23
本文主要是介绍范围for语句for auto详解(C++11新特性),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
范围for语句for auto详解(C++11新特性)
- auto类型说明符
- 范围for语句for auto
auto类型说明符
常常需要将表达式的值赋给变量,为了解决声明变量时表达式的值未知的问题,引入了auto类型说明符。它可以根据初始值自动分析表达式所属类型:
// 由val1和val2相加的结果推断出item的类型 auto item = val1 + val2; //声明同一种类型 auto i = 0, *p = &i;//正确:p是整形指针 //不能声明不同类型 auto sz = 0, pi = 3.14 //错误
范围for语句for auto
c++11引入了一种更简单的for语句,可遍历容器或序列的所有元素:
for (declaration: expression) statement
其中expression必须是一个序列,其拥有能返回迭代器begin和end成员;
declaration定义一个变量,序列中的每个元素都必须能转换成该变量的类型,通常使用auto。如果需要对序列中的元素执行操作,循环变量须声明成引用类型;
每次迭代都会重新定义循环控制变量,并将其初始化为序列中的写一个值,之后执行statement。所有元素都处理完毕后循环中止。
vector<int> v = {0,1,2,3,4,5,6,7,8,9}; //范围变量须是引用类型,才能对元素执行写操作 for(auto &r : v) //对v中每一个元素 r *= 2;//将v中每个元素翻倍
由于准备修改v中元素的值,因此将r声明成引用类型。此时在循环内给r赋值,即改变了r所绑定的元素的值。
范围for语句等价的传统for语句:
for (auto beg = v.begin(), end = v.end(); beg != end; ++beg) { auto &r = *beg; r *= 2; }
注
1.由于范围for语句预存了容器end()的值,所以不能在范围for语句内添加(删除)序列中的元素,否则end函数的值可能会无效。
2.由于for auto是c++11新特性,所以在使用vscode时可能会报错,需要在配置文件或CMakeLists中添加c++11特性
这篇关于范围for语句for auto详解(C++11新特性)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享