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



我有一个复杂结构的向量(这里是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);
}

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

在使用std::ranges::views::transform和范围算法的c++20中,可以执行

#include <ranges>    // std::views::transform
#include <algorithm> // std::ranges::copy
std::vector<int> x_values;
x_values.reserve(list.size());
std::ranges::copy(std::views::transform(list, [](const auto& pair) {
return pair.first; }), std::back_inserter(x_values));

or可以是对该对的一个视图。首先(如果缩进具有只读范围)

#include <ranges>    // std::views::transform
const auto x_values_view = std::views::transform(list, [](const auto& pair) {
return pair.first; }
);

现场演示

相关内容

  • 没有找到相关文章

最新更新