【问题标题】:How can I copy two vectors to other vector in C++如何在 C++ 中将两个向量复制到另一个向量
【发布时间】:2015-12-28 07:50:22
【问题描述】:

我有两个向量。我想创建一个包含这两个向量值的新向量。我发现一个快速的方法可以用作

vector<int> original_vector
vector<int> copy_to_vector(original_vector)

但是,它没有显示如何复制两个向量(以上仅用于一个到另一个)。现在我的问题是

vector<int> original_vector1
vector<int> original_vector2
//Copy original_vector1 and original_vector2 to copy_to_vector
// Note that original_vector1 or original_vector2 maybe empty
vector<int> copy_to_vector

我怎样才能在 C++ 中做到这一点。我在 Ubuntu 中使用 g++

我目前的解决方案是

  std::vector<U32> copy_to_vector(original_vector1);
  copy_to_vector.insert(copy_to_vector.end(), original_vector2.begin(), original_vector2.end());

【问题讨论】:

    标签: c++ vector stl g++


    【解决方案1】:
    vector<int> copy_to_vector(original_vector1)   
    copy_to_vector.reserve(original_vector1.size() + original_vector2.size()); 
    copy_to_vector.insert( copy_to_vector.end(), original_vector2.begin(), original_vector2.end());
    

    如果vectors 之一或两者都为空,则此解决方案可以正常工作

    live demo

    【讨论】:

    • original_vector1 或 original_vector2 为空是否有效?
    【解决方案2】:

    将这样的操作封装在实用程序函数中通常是个好主意。

    RVO 需要省略返回值的副本,因此该代码与内联操作一样高效,但更易于维护和推理:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    // utility function to return a new vector which is the
    // result of v1 with v2 appended. order is preserved
    std::vector<int> combine(const std::vector<int>& v1,
                             const std::vector<int>& v2)
    {
        std::vector<int> result;
        result.reserve(v1.size() + v2.size());
        result = v1;
        result.insert(result.end(), v2.begin(), v2.end());
        return result;
    }
    
    int main()
    {
        using namespace std;
    
        vector<int> x = { 1, 2, 3 };
        vector<int> y = { 4, 5, 6 };
    
        auto z = combine(x, y);
    
        copy(begin(z), end(z), ostream_iterator<int>(cout, "\n"));
    
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      使用std::back_inserter

      #include <iterator>  // back_inserter
      #include <algorithm> // copy
      
      vector<int> copy_to_vector;
      copy_to_vector.reserve( original_vector1.size() + original_vector2.size() ) // reserve memory for both vectors at once
      copy_to_vector = original_vector1;   
      std::copy(original_vector2.begin(),original_vector2.end(),std::back_inserter(copy_to_vector));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-23
        • 1970-01-01
        • 2016-07-08
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        相关资源
        最近更新 更多