dl; copy(v.beginO. v.endO, out
Автор admin Воскресенье, 7 июня 2009 11:32
dl; copy(v.beginO. v.endO, out): cout « endl; } ///:- При запуске программы становится видно, что вызов reserve() всего лишь резервирует память — конструкторы элементов при этом не вызываются. Вызов generate_n() требует основательной работы: при каждом вызове NoisyGen::operator() происходит конструирование объекта, конструирование копии (в векторе) и уничтожение временного объекта. Но если объект вставляется в середину вектора, для сохранения линейности массива вектор должен сдвинуть все следующие элементы на одну позицию. Свободного места в векторе достаточно, поэтому смещение выполняется оператором присваивания (хотя если бы аргумент reserve() был равен 10 вместо 11, пришлось бы выделять дополнительную память). При уничтожении элемента функцией erase() оператор присваивания снова используется для смещения всех последующих элементов на одну позицию назад, чтобы занять освободившееся место (обратите внимание: для этого необходимо, чтобы оператор присваивания правильно уничтожал левосторонний объект). После сдвига элементов остается удалить последний элемент массива. Дек Дек (контейнер deque) представляе
Комментарии закрыты.
Последние комментарии