連線向量

一個 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());