有多种方法可以实现您的目标。
std::vector::insert
可以通过在指定位置前插入新元素来扩展向量,从而通过插入的元素数量有效地增加容器大小。您可以遵循以下其中一种方法。第二个版本使用C++11,并且可以被认为是更通用的答案,因为b也可以是数组。
a.insert(a.end(), b.begin(), b.end());
a.insert(std::end(a), std::begin(b), std::end(b));
在使用std::vector::insert之前,有时候最好使用reserve函数。 std::vector::reserve函数可以将容器的容量增加到大于或等于new_cap的值。如果new_cap大于当前的capacity(),则会分配新的存储空间,否则此方法不执行任何操作。
a.reserve(a.size() + distance(b.begin(), b.end()));
使用reserve函数并非必须,但可能是明智的选择。如果你要重复向一个vector中插入元素且已知最终大小,而且这个大小很大,那么最好使用reserve。否则,最好让STL根据需要来扩展你的vector。
std::copy
std::copy是实现你的目标的第二个选项。此函数将范围(first,last)中的元素复制到以result开头的范围中。
std::copy (b.begin(), b.end(), std::back_inserter(a))
然而,使用 std::copy 比使用 std::vector::insert() 更慢,因为 std::copy() 无法预留足够的空间(它只能访问迭代器,而无法访问向量本身),而 std::vector::insert() 作为成员函数可以。因此,使用 std::copy 确实比使用 std::vector::insert 要慢。大多数人在不知道这种情况的情况下过度使用 std::copy。
boost::push_back
你可以考虑的第三个选项是使用 boost 的 push_back 函数。
boost::push_back(a, b);