容器遍历之foreach学习心得

来源:互联网 发布:python 对象转字符串 编辑:程序博客网 时间:2024/06/05 15:37
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
#include
using 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()
0 0
原创粉丝点击