【发布时间】:2011-10-24 19:27:37
【问题描述】:
我有一个向量的向量,比如说
std::vector< std::vector<int> > my2dArray;
现在我想要一个包含my2dArray 内向量大小的向量。手动这看起来像
std::vector<int> mySizes;
for (int i = 0; i < my2dArray.size(); i++ )
{
mySizes.push_back( my2dArray[i].size() );
}
有没有更“优雅”的方式来做到这一点 - 无需手动编写循环 - 通过使用一些 STL 算法等?
【问题讨论】:
-
人们对循环有什么看法?我是说真的,我看看发布的替代方案,我宁愿写 for 循环。
-
这写起来可能很烦人,但我认为,它比你在这里得到的答案更具可读性......也许只是用 for_each 和 lambda 重写它......(编辑:约翰写了几乎一样……下次要先刷新)
-
@john 循环没有问题。在这种情况下,我主要对替代方案感到好奇。我将在这里坚持循环,因为它优于其他建议的解决方案(在 C++03 中),见下文。
-
有效地使用 STL 算法等只需要一点时间来适应 - 我发现到处都明确地写出代码会分散我的实际意图。
-
@john:人们反对编写循环的原因是什么?好吧,你可以写错循环,例如。很难写错
std::transform而不出现编译错误。使用算法指定意图(std::transform是一个转换的循环),而要知道循环在做什么,您必须查看它在做什么。算法唯一真正的缺点是必须编写函子等冗长,在 C++11 中,使用 lambdas 可以缓解这种情况。