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

shu*_*alo 4 c++ lambda vector c++11

我有一个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 );
Run Code Online (Sandbox Code Playgroud)

当然,这可以通过循环来实现,但在C++ 11中我们想要使用lambdas.我在std :: algorithm中找不到类似的东西.标准工具似乎只提供了改变原始向量的转换,并且不允许更改数据类型.

Rak*_*111 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();
});
Run Code Online (Sandbox Code Playgroud)