連線向量
一個 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());