范围for语句
2017-08-15 22:21
232 查看
C++11 新标准引入了一种更简单的for语句,这种语句可以遍历容器或其他序列的所有元素。范围for语句(range for statement)的语法形式是:
expression表示的必须是一个序列,比如用花括号括起来的初始值列表、数组或者vector或string等类型的对象,这些类型的共同特点是拥有能返回迭代器的begin和end成员。
declaration定义一个变量,序列中的每个元素都得能转换成该变量的类型。确保类型相容最简单的办法是使用auto类型说明符,这个关键字可以令编译器帮助我们指定合适的类型。如果需要对序列中的元素执行写操作,循环变量必须声明成引用类型。
例:把vector对象中的每个元素都翻倍:
for语句头声明了循环控制变量r,并把它和v关联在一起,我们使用关键字auto令编译器为r指定正确的类型。由于准备修改v的元素的值,因此将r声明为引用类型。此时,在循环体内给r赋值,即改变了r所绑定的元素的值。
范围for语句的定义来源于与之等价的传统for语句:
注意:不能通过范围for语句增加vector对象(或者其它容器)的元素,因为在范围for语句中,预存了end()的值。一旦在序列中添加(删除)元素,end函数的值就可能变得无效。
for (declaration : expression) statement
expression表示的必须是一个序列,比如用花括号括起来的初始值列表、数组或者vector或string等类型的对象,这些类型的共同特点是拥有能返回迭代器的begin和end成员。
declaration定义一个变量,序列中的每个元素都得能转换成该变量的类型。确保类型相容最简单的办法是使用auto类型说明符,这个关键字可以令编译器帮助我们指定合适的类型。如果需要对序列中的元素执行写操作,循环变量必须声明成引用类型。
例:把vector对象中的每个元素都翻倍:
vector<int> v ={0,1,2,3,4,5,6,7,8,9}; //范围变量必须是引用类型,这样才能对元素执行写操作 for(auto &r:v) r *=2; //将v中每个元素的值翻倍
for语句头声明了循环控制变量r,并把它和v关联在一起,我们使用关键字auto令编译器为r指定正确的类型。由于准备修改v的元素的值,因此将r声明为引用类型。此时,在循环体内给r赋值,即改变了r所绑定的元素的值。
范围for语句的定义来源于与之等价的传统for语句:
for(auto beg=v.begin() , end=v.end() ; beg!=end; ++beg) { auto &r=*beg; //r必须是引用类型,这样才能对元素执行写操作 r *=2; }
注意:不能通过范围for语句增加vector对象(或者其它容器)的元素,因为在范围for语句中,预存了end()的值。一旦在序列中添加(删除)元素,end函数的值就可能变得无效。
相关文章推荐
- C++中范围for语句
- C++11 范围for语句
- C++中范围for语句
- Cocos2dx3.0过渡篇 各种遍历与范围for语句的使用【转】
- 使用范围for语句和while循环以及传统for的区别
- C++之范围for语句
- Cocos2dx3.0过渡篇(二十二)各种遍历与范围for语句的使用
- C++ Prime:范围for语句
- 范围for语句的整理
- C++中基于范围的for语句
- cocos2d-x学习笔记——各种遍历与范围for语句的使用
- 标准库类型vector和范围for语句
- C++ Primer中的陌生概念四:范围for语句
- C++学习:范围for(range for)语句
- C++11特性——基于范围的for语句
- 【足迹】C++ primer 范围for语句
- 范围 for 语句与二维数组
- 范围for语句
- C++之范围for语句
- 类内初始化,范围for语句,vector的vector,容器的cbegin和cend