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