我如何连接两个std::向量?


当前回答

你应该使用vector::insert

v1.insert(v1.end(), v2.begin(), v2.end());

其他回答

vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = {11, 12, 13, 14, 15};
copy(v2.begin(), v2.end(), back_inserter(v1));

对于提供push_back (string, vector, deque,…)功能的容器:

Std::copy(Std::begin(input), Std::end(input), Std::back_inserter(output))

and

对于提供insert (map, sets)功能的容器:

Std::copy(Std::begin(input), Std::end(input), Std::inserter(output, output.end()))

使用c++ 20,你可以去掉带范围的begin()和end()。

#include <ranges>

std::ranges::copy(vec2, std::back_inserter(vec1));

或者如果你想移动元素:

std::ranges::move(vec2, std::back_inserter(vec1));
vector1.insert( vector1.end(), vector2.begin(), vector2.end() );

c++ 17中有一个算法std::merge,当输入向量排序时,它非常容易使用,

下面是例子:

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    //DATA
    std::vector<int> v1{2,4,6,8};
    std::vector<int> v2{12,14,16,18};

    //MERGE
    std::vector<int> dst;
    std::merge(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(dst));

    //PRINT
    for(auto item:dst)
        std::cout<<item<<" ";

    return 0;
}