连接向量
一个 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());