2017-05-27 144 views
1

我有一个std :: vector X的std :: vector,例如,在C++中为double。复制std :: vector但将lambda应用于每个元素

如何将X转换为int的std :: vector Y,使得X [i] .size()== Y [i]适用于所有可接受的索引i?

std::vector< std::vector<int> > X; 
... 
/* What I want to do should look as follows */ 
std::vector<int> Y = std::copy_and_transform(X, lambda_to_get_size); 

当然,这可以用一个循环来实现,但在C++ 11我们想用lambda表达式来代替。我还没有在std :: algorithm中找到类似的东西。标准工具似乎只给出了改变原始矢量的变换,并且不允许改变数据类型。

回答

4

您可以使用std::transform

std::vector<int> Y; 
std::transform(X.cbegin(), X.cend(), std::back_inserter(Y), [](const std::vector<int>& value) { 
    return value.size(); 
}); 
+1

问题是标签的[标签:C++ 11],所以我会在拉姆达变化'常量auto'的东西复杂化('decltype(X)::为const_reference '或别的东西) – Zereges

+0

@Zereges谢谢!明确写入类型也有效:) – Rakete1111

+0

@Zereges,我不同意Google C++开发团队在这里列出的原因:https://google.github.io/styleguide/cppguide.html#auto Stack Overflow是一个教育网站,并显示完整的类型帮助清晰。我担心'auto'是一种拐杖,不会考虑发生了什么事情,并且过度使用/“滥用”的时机已经成熟。 –

相关问题