Когда копируется std::vector
, все его элементы также копируются - таким образом, время должно быть пропорционально vector.size()
.
В c++0x
введена так называемая семантика move , позволяющая определять конструктор перемещения и оператор присваивания перемещения для типов. Эти определены для контейнеров стандартной библиотеки (например, std::vector
) и должны позволять перемещать векторы за O(1)
время. Если вы беспокоитесь о производительности, возможно, вам стоит пересмотреть свои операции, чтобы использовать эти новые функции.
РЕДАКТИРОВАТЬ: Исходя из связанного вопроса, если вы беспокоитесь о дополнительных копиях, которые могут быть сделаны при вызове vector::push_back
, у вас есть несколько вариантов:
- В
c++0x
используйте вместо этого новый vector::emplace_back
. Это позволяет создавать ваши объекты на месте в контейнере.
- В
c++0x
используйте move семантику, используя что-то вроде vector.push_back(std::move(object_to_push))
. Для типов POD это все равно будет делать больше копирования, чем опция emplace_back
.
- Храните контейнер указателей на объекты, а не на сами объекты. Единственная вещь, которая будет скопирована контейнером в этом случае, это сам указатель - который дешев. Возможно, вы захотите использовать какой-либо вариант интеллектуальных указателей с этой опцией.
Надеюсь, это поможет.