作为拥有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 ++参考网站。
这两个循环之间有什么区别?
答案 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 ++)兼容。