连接向量

一个 std::vector 可以使用成员函数 insert() 附加到另一个 std::vector

std::vector<int> a = {0, 1, 2, 3, 4};
std::vector<int> b = {5, 6, 7, 8, 9};

a.insert(a.end(), b.begin(), b.end());

但是,如果你尝试将向量附加到自身,此解决方案将失败,因为标准指定给予 insert() 的迭代器不得与接收器对象的元素具有相同的范围。

Version >= C++ 11

可以使用 std::begin()std::end() 函数代替使用向量的成员函数 :

a.insert(std::end(a), std::begin(b), std::end(b));

这是一个更通用的解决方案,例如,因为 b 也可以是一个数组。但是,此解决方案也不允许你向自身附加向量。

如果接收向量中元素的顺序无关紧要,考虑每个向量中的元素数量可以避免不必要的复制操作:

if (b.size() < a.size())
  a.insert(a.end(), b.begin(), b.end());
else
  b.insert(b.end(), a.begin(), a.end());