Есть несколько способов достижения вашей цели.
станд :: вектор :: вставка
Вектор можно расширить, вставляя новые элементы перед элементом в указанной позиции, эффективно увеличивая размер контейнера на количество вставленных элементов. Вы можете следовать одному из следующих подходов. Вторая версия использует 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 (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, не зная этого сценария.
повышение :: push_back
Третий вариант, который вы можете рассмотреть, - это использование функции Boost push_back .
boost::push_back(a, b);