对于in或for_each,哪个更可取

Which is preferable for each, in or for_each?

本文关键字:each in for 对于      更新时间:2023-10-16

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

vector<CString> strings1;

方法1(使用具有lambda:的for_each算法

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

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

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中工作。

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

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

正如Stephan T.Lavavej几天前在"GoingNative 2012"会议上指出的那样,基于"官方"范围的for loop将成为即将发布的新Visual Studio测试版的一部分。因此,这将是前进的道路:

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

或者使用一个参考来减少按值使用的复制工作量:

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

编辑:上面提到的GoingNative谈话可以在这里找到

虽然我认为第二个选项的语法更清晰,但我个人更喜欢避免它,因为它基于标准草案的早期版本,因此在未来可能会发生变化。YMMV,因为这主要是一个品味问题。