代码之家  ›  专栏  ›  技术社区  ›  infinitezero

将成员从vector<Class>复制到vector<Member\u Type>

  •  0
  • infinitezero  · 技术社区  · 2 年前

    我有一个复杂结构的向量(这里 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);
    }
    
    1 回复  |  直到 2 年前
        1
  •  6
  •   Ted Lyngmo    2 年前

    std::transform 通常用于以下用途:

    #include <algorithm>
    
    // ...
    
    std::vector<int> x_values;
    
    std::transform(list.begin(), list.end(), std::back_inserter(x_values), [](auto& pair) {
        return pair.first;
    });
    
        2
  •  0
  •   JeJo    2 年前

    在里面 使用 std::ranges::views::transform 和范围算法

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

    也可能是一个公正的观点对这对。首先(如果缩进具有只读范围)

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

    Live Demo