Пряма відповідь:
- Використовуйте
=
оператора
Ми можемо використовувати функцію public member std::vector::operator=
контейнера std::vector
для присвоєння значень з вектора іншому.
- Використовуйте конструкторську функцію
Крім того, функція конструктора також має сенс. Функція конструктора з іншим вектором як параметр (наприклад x
) будує контейнер з копією кожного з елементів x
у тому ж порядку.
Обережно:
- Не використовувати
std::vector::swap
std::vector::swap
не є копіюванням вектора на інший, це фактично заміна елементів двох векторів так, як підказує його назва. Іншими словами, векторний джерело, з якого буде скопійовано, модифікується після std::vector::swap
виклику, що, мабуть, не те, що ви очікували.
- Глибока чи неглибока копія?
Якщо елементи у вихідному векторі є вказівниками на інші дані, то іноді потрібна глибока копія.
За вікіпедією:
Поглиблена копія, що означає, що поля дереферендуються: замість посилань на об'єкти, що копіюються, створюються нові об'єкти копіювання для будь-яких посилаються об'єктів, а посилання на них розміщуються в B.
Насправді в даний час в C ++ немає вбудованого способу зробити глибоку копію. Усі вищезазначені способи дрібні. Якщо потрібна глибока копія, ви можете перемістити вектор і зробити копію посилань вручну. Альтернативно, ітератор може бути розглянутий для проїзду. Обговорення ітератора поза цим питанням.
Список літератури
Сторінка сайту std::vector
на cplusplus.com