哪个更适合每个,in或for_each?

时间:2012-02-07 19:52:29

标签: c++ visual-studio-2010 stl c++11

使用Visual Studio时,我至少可以通过以下三种方式编写容器遍历。哪种方式更可取?假设:

vector<CString> strings1;

方法1(使用for_each算法和lambda:

for_each(strings1.begin(), strings1.end(), [](CString s){
   _tprintf(_T("%s"), s);
}

方法2(使用for each, in,特定于microsoft):

for each(auto s in strings1)
{
   _tprintf(_T("%s"), s);
}

方法3(使用数组语法处理向量):

for (int i=0; i<v.size(); ++i)
{
   _tprintf(_T("%s"), v[i]);
}

我知道方法2不可移植,但我不关心是否可移植。这只需要在Windows中工作。

3 个答案:

答案 0 :(得分:5)

在C ++ 11中,您可以使用基于范围的方法,类似于方法2,但标准。

http://www2.research.att.com/~bs/C++0xFAQ.html#for

答案 1 :(得分:3)

正如Stephan T. Lavavej几天前在“GoingNative 2012”会议上指出的那样,“官方”基于范围的for循环将成为即将发布的新版测试版的一部分视觉工作室。所以这将是要走的路:

for(auto s : strings1)
{
   _tprintf(_T("%s"), s);
}

或使用引用来减少按值使用的复制工作:

for (auto &s : strings1)  ....

编辑:上面提到的GoingNative演讲可以找到here

答案 2 :(得分:1)

虽然我认为第二种选择的语法更清晰,但我个人更愿意避免使用它,因为它基于草案标准的早期版本,因此将来可能会发生变化。 YMMV,因为它主要是品味问题。