您的位置:首页 > 其它

范围for语句

2015-03-10 19:07 162 查看

把vector对象中的每个元素都翻倍

#include"stdafx.h"

#include <vector>

#include <iostream>

int main()

{

using namespace std;

vector <int> v1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

vector <int>::iterator Iter;

for (auto &r : v1)

r *= 2;


cout << "v1 =";

for (Iter = v1.begin(); Iter != v1.end(); Iter++)

cout << " " << *Iter;

cout << endl;

getchar();

}

输出结果为:

C++11新标准中引入了一种更为简单的for语句,它可以遍历容器或其他序列的所有元素。范围for语句(range for statement)的语法形式为:

for(declation:expression)

statement;

其中,expression表示的必须是一个序列,比如花括号括起来的初始值列表、数组、或者vector或string类型说明符,这个关键字可以令编译器帮助我们指定合适的类型。如果需要对序列中的元素执行写操作,循环变量必须声明成引用类型。

每次迭代都会重新定义循环控制变量,并将其初始化成序列中的下一个值,之后才会执行statement。像往常一样,statement可以使一条单独的语句也可以是一个块。所有元素都处理完毕后循环终止。范围for语句的定义来源于与之等价的传统for语句:

for(auto beg=v.begin(),end=v.end();beg!=end;++beg)

{

auto &r=*beg;//r必须是引用类型,这样才能对元素执行写操作

r*=2;//将v中的 每个元素的值翻倍。

}

此外,大家要知道,不能通过for语句来增加vector对象中元素,因为在for语句中,预存了end()的值。一旦在序列中添加(删除)元素,end()函数的值就可能变得无效了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: