容器遍历之foreach学习心得

时间:2023-01-14 16:26:20
C++中遍历容器的方法有很多种,如普通for循环+容器长度,STL迭代器等,其中,for each的用法最简洁。一、标准C++的写法如下:for each (object var in collection_to_loop){
}注:在VS编辑器中,可以直接选择foreach即可生成,但生成的代码见上,for与each之间有空格。 STL的算法库中,还提供了一个for_each()函数,它可以指定区间。
此外,还可以使用“基于范围的for循环(C++11)”,见《C++PrimerPlus》P152。另附,VS2012下的示例代码:#include#includeusing std::vector;using std::cout;using std::endl;
int _tmain(int argc, _TCHAR* argv[]){    vector vec;    for (int i = 0; i <10; i++)    {       vec.push_back( 2 * i);    }
    for each (auto var invec)    //for each (object var incollection_to_loop)    {       cout << var << " ";    }
    cout <<endl;    for(int var : vec)   // 基于范围的for循环    {       cout << var << " ";    }
    return 0;}
二、Qt中的写法首先,Qt支持“for each (object var incollection_to_loop)”和“基于范围的for循环”两种标准C++的写法。其次,Qt也支持如下的写法:foreach (objectvar,collection_to_loop)类似与C#中的写法,for与each无空格,参数一是元素,参数二是容器,中间用逗号分隔。 注:foreach是Qt提供的一个“伪关键字”,见《C++GUI Programming with Qt4, Second Edition》P213
三、对比C#中的写法首先,C++的容器(container)在C#中称为集合(collection)。其次,C#的for与each无空格,写法是:foreach (object var incollection_to_loop)。再次,可以用var进行自动类型推断。
注:C#中的var,其作用类似与C++中的auto,但比auto功能强大。auto必须在当前语句中能推断出变量的类型,而var可以先声明变量,在后续的语句中再指定变量的类型,且变量类型指定后,不能再改变其类型(不再接收其他类型的赋值)。 总结:1,C++需要变量容器,推荐使用标准C++的“for each (object var incollection_to_loop)”,它类似与C#,同时兼容VS和Qt;2,如果是要选择区间遍历,可以使用STL的for_each()