每个(in)和for(:)之间有什么区别?

时间:2014-04-03 11:30:30

标签: c++ loops for-loop

作为拥有python背景的人,当我第一次看到for ( : )循环时,我感到非常惊讶:

vector<int> vec = {1,2,3,4};
int sum = 0;
for (int i : vec){
    sum += i;
}
//sum is now 10

这是一个非常有用的结构,只要你不需要多次索引值,就应该使用它。

但今天我发现还有一个for each ( in )循环,使用如下:

vector<int> vec = {1,2,3,4};
int sum = 0;
for each (int i in vec){
    sum += i;
}
//sum is now 10

有趣的是,第二个的谷歌搜索结果主要与微软有关,而不是通常的c ++参考网站。

这两个循环之间有什么区别?

2 个答案:

答案 0 :(得分:18)

第一个叫做range-based for loop,是该语言的C ++ 11特性。它允许您在具有可用的begin()和end()方法(成员或非成员)或数组的范围内进行迭代。

第二种是Microsoft特定的语法,可用于C ++ / CLI,但也可用于C ++。它允许迭代数组或集合。不建议使用它,并且应优先选择基于范围的for循环。请参阅for each, in

答案 1 :(得分:2)

每个循环由Microsoft Visual C ++提供。 请参阅:http://msdn.microsoft.com/en-us/library/xey702bw%28VS.80%29.aspx

它不是标准的C ++,而且很老(在VS2005中引入)。编译器(VS)在编译时将此循环转换为正确的循环。

因此最好坚持使用常规for ( ; ; )循环或for ( : )循环以允许与其他编译(如g ++)兼容。