繁体   English   中英

如何在C ++中将两个向量复制到其他向量

[英]How can I copy two vectors to other vector in C++

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

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());
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或两个vectors均为空,则此解决方案效果很好

现场演示

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

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

使用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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM