2017-07-28 34 views
1

的向量獲取特定成員的矢量I具有如下結構的向量。該結構保存一個圖的相關數據。從結構

struct DATA_T 
{ 
    double x; 
    double y; 
    double z; 
} 

std::vector<DATA_T> results; 

我需要能夠對結果矢量內檢索所有x值,並將其存儲爲雙打

的矢量

我知道,我可以以編程方式創建這些載體。

std::vector<double> x_values; 
x_values.reserve(results.size()); 
for(auto const &data : results) 
{ 
    x_values.push_back(data.x); 
} 

但是,我想知道是否有一個更簡潔的解決方案。可能使用類似的方法我怎麼能搜索使用find_if具體數據點?

+3

你可以使用'的std :: transform',但我懷疑,這將是任何更快或比你已經有了,但你應該在調用之前保留在矢量適量清潔'push_back' – user463035818

+0

與[C++的std ::變換pairs-的矢量>第一個新的向量(https://stackoverflow.com可能複製/問題/ 9094132/C-stdtransform-矢量的-對一對新的矢量) –

回答

1

你可以使用std::transform爲它提供適當的λ檢索x

std::vector<double> x_values; 
x_values.reserve(results.size()); 

std::transform(std::cbegin(results), std::cend(results), 
    std::back_inserter(x_values), 
    [](const auto& data) { 
     return data.x; 
    } 
); 

DEMO

+0

雖然也許'''for'''循環的方法更具有可讀性 – iyop45

+0

@ iyop45對於這件特定的代碼'的std :: transform'的可能是一個不錯的選擇沒有鬆動的可讀性。但是在一般情況下,單個地方的太多STL算法並不能保證可讀性:) –