Педагогическая (и, следовательно, упрощенная) версия контейнера под названием «Vec» обсуждается в главе 11 замечательной (вводной) книги «Ускоренный C ++». То, что они описывают, является урезанной версией std :: vector, но я думаю, что все же стоит отметить, что:
1) они реализуют свой шаблонный класс в терминах массива,
2) они обсуждают push_back с точки зрения хитрости (упомянутой выше), заключающейся в выделении большего объема памяти, чем необходимо, и возвращении для большего, когда они заканчиваются, и
3) они используют распределитель <T
> для управления памятью. В этом контексте новый оператор недостаточно гибок, так как он выделяет и инициализирует память.
Я повторяю, однако, что это не означает, что реальные реализации там такие простые. Но поскольку «Ускоренный C ++» довольно широко распространен, заинтересованные могут найти в соответствующей главе один из способов создания, копирования, назначения и уничтожения вектороподобных объектов.
РЕДАКТИРОВАТЬ: В связанной заметке я только что нашел следующее сообщение в блоге Херба Саттера, в котором он комментирует более раннее сообщение в блоге Эндрю Кенига о том, следует ли беспокоиться о соприкосновении векторных элементов в памяти: 1012 *
Не передайте: векторы гарантированно будут смежными .