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)
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)