复制std :: vector但将lambda应用于每个元素

时间:2017-05-27 09:31:14

标签: c++ c++11 vector lambda

我有一个std :: vector X的std :: vector,比方说,在C ++中是double。

如何将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中我们想要使用lambdas。我在std :: algorithm中找不到类似的东西。标准工具似乎只提供了改变原始向量的转换,并且不允许更改数据类型。

1 个答案:

答案 0 :(得分:10)

您可以使用std::transform

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