有多种方法可以实现您的目标。
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 之前使用保留函数。 std::vector::reserve 函数将容器的容量增加到大于或等于 new_cap 的值。如果 new_cap 大于当前容量(),则分配新存储,否则该方法不执行任何操作。
a.reserve(a.size() + distance(b.begin(), b.end()));
保留功能不是必需的,但可能是可取的。如果您重复插入一个您知道最终大小并且该大小很大的向量,那么最好使用保留。否则,最好让 STL 根据需要增长您的向量。
std::copy
std::copy 是您可以考虑实现目标的第二个选项。该函数将范围(first,last)中的元素复制到从 result 开始的范围中。
std::copy (b.begin(), b.end(), std::back_inserter(a));
但是使用 std::copy 比使用 std::vector::insert() 慢,因为 std::copy() 不能预先预留足够的空间(它无法访问vector 本身,仅适用于具有的迭代器),而作为成员函数的 std::vector::insert() 可以。由于 std::copy 确实比使用 std::vector::insert 慢。大多数人在不知道这种情况的情况下过度使用 std::copy。
boost::push_back
您可以考虑的第三个选项是使用 boost 的 push_back 函数。
boost::push_back(a, b);