2017-05-27 39 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'是一種柺杖,不會考慮發生了什麼事情,並且過度使用/「濫用」的時機已經成熟。 –

相關問題