Какой объект C ++ копирует быстрее? - PullRequest
0 голосов
/ 18 сентября 2011

Существуют два экземпляра этого объекта C ++.

my_type
{
    public:
        std::vector<unsigned short> a;
}

Один, где std :: vector пуст, а другой, где он содержит 50 элементов.

Какой экземпляр копируется наиболее быстро илиони копируют в одно и то же время?

1 Ответ

10 голосов
/ 18 сентября 2011

Когда копируется std::vector, все его элементы также копируются - таким образом, время должно быть пропорционально vector.size().

В c++0x введена так называемая семантика move , позволяющая определять конструктор перемещения и оператор присваивания перемещения для типов. Эти определены для контейнеров стандартной библиотеки (например, std::vector) и должны позволять перемещать векторы за O(1) время. Если вы беспокоитесь о производительности, возможно, вам стоит пересмотреть свои операции, чтобы использовать эти новые функции.

РЕДАКТИРОВАТЬ: Исходя из связанного вопроса, если вы беспокоитесь о дополнительных копиях, которые могут быть сделаны при вызове vector::push_back, у вас есть несколько вариантов:

  1. В c++0x используйте вместо этого новый vector::emplace_back. Это позволяет создавать ваши объекты на месте в контейнере.
  2. В c++0x используйте move семантику, используя что-то вроде vector.push_back(std::move(object_to_push)). Для типов POD это все равно будет делать больше копирования, чем опция emplace_back.
  3. Храните контейнер указателей на объекты, а не на сами объекты. Единственная вещь, которая будет скопирована контейнером в этом случае, это сам указатель - который дешев. Возможно, вы захотите использовать какой-либо вариант интеллектуальных указателей с этой опцией.

Надеюсь, это поможет.

...