将成员从向量 <Class> 复制到向量 <Member_Type> 的最佳方法

inf*_*ero 0 c++ algorithm copy std stdvector

我有一个复杂结构的向量(此处std::pair<int, int>)。我现在想将一个成员(比如说std::pair::first)复制到一个新的向量中。有没有比这更好(更惯用)的方法

std::vector<std::pair<int, int>> list = {{1,2},{2,4},{3,6}};

std::vector<int> x_values;
x_values.reserve(list.size());
for( auto const& elem : list )
{
    x_values.emplace_back(elem.first);
}
Run Code Online (Sandbox Code Playgroud)

Ted*_*gmo 6

std::transform通常用于此目的:

#include <algorithm>  // transform
#include <iterator>   // back_inserter

// ...

std::vector<int> x_values;
x_values.reserve(list.size());

std::transform(list.cbegin(), list.cend(), std::back_inserter(x_values),
               [](const auto& pair) { return pair.first; });
Run Code Online (Sandbox Code Playgroud)

  • 太好了,正是我想要的! (2认同)