使用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中工作。
答案 0 :(得分:5)
在C ++ 11中,您可以使用基于范围的方法,类似于方法2,但标准。
答案 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,因为它主要是品味问题。