2017-05-27 5 views
1

私はstd :: vector Xのstd :: vectorを持っています。std :: vectorをコピーしますが、各要素にラムダを適用します

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のようなものは見つけていません。標準的なツールは、元のベクトルを変更し、データ型を変更できない場所でのみ変換を行うように見えます。

答えて

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

質問は[タグ:++ 11 C]タグ付けされているので、私は複雑なもの( 'decltype(X):: const_referenceにラムダで' constのauto'を変更します'その他) – Zereges

+0

@Zeregesありがとう!明示的に型を書くこともできます:) – Rakete1111

+0

@Zereges、私はここでGoogle C++開発チームによって策定された理由に同意しません:https://google.github.io/styleguide/cppguide.html#auto Stack Overflowは教育サイトですフルタイプの明快さを示しています。私は、「オート」は何が起こっているのか、過度に使用されているのか誤解しているのかを考えない馬鹿だと心配しています。 –

関連する問題