Прямой ответ:
Мы можем использовать открытую функцию-член std::vector::operator=
контейнера std::vector
для назначения значений из вектора в другой.
- Используйте функцию конструктора
Кроме того, функция конструктора также имеет смысл. Функция конструктора с другим вектором в качестве параметра (например,x
) создает контейнер с копией каждого из элементов x
в том же порядке.
Внимание:
- Не используй
std::vector::swap
std::vector::swap
это не копирование вектора в другой, это на самом деле замена элементов двух векторов, как и предполагает его название. Другими словами, исходный вектор для копирования изменяется после std::vector::swap
вызова, что, вероятно, не то, что вы ожидаете.
- Глубокая или мелкая копия?
Если элементы в исходном векторе являются указателями на другие данные, то иногда требуется глубокая копия.
Согласно википедии:
Глубокая копия, означающая, что поля разыменовываются: вместо ссылок на копируемые объекты создаются новые объекты копирования для любых ссылочных объектов, а ссылки на них помещаются в B.
На самом деле, в C ++ в настоящее время нет встроенного способа сделать глубокое копирование. Все вышеперечисленные способы мелкие. Если необходима глубокая копия, вы можете пройти вектор и сделать копии ссылок вручную. Альтернативно, итератор может рассматриваться для обхода. Обсуждение итератора выходит за рамки этого вопроса.
Ссылки
Страница std::vector
на cplusplus.com