#  Пишем на С++ вектор, умеющий расширяться без копирования элементов
BotHabr (tgi,2) → All  –  15:00:04 2022-11-26

Опубликовано: Sat, 26 Nov 2022 14:44:00 GMT
Канал: Системное программирование – Обеспечение работы прикладного ПО

В языке С есть функции malloc, free и realloc. При использовании последней вы можете написать этакий расширяющийся массив из примитивных типов или структур (классов-то нет), который, можно надеяться, не будет копировать все данные при каждом расширении. В С++ есть встроенный класс vector, который представляет из себя расщиряющийся массив, но он так не умеет: при каждом расширении вектора выделяется новый участок памяти и все элементы перемещаются на него (по возможности, с использованием move-семантики). Но ведь, если можно каждый раз не копировать все старые элементы на новое место, вектор должен работать быстрее? В этой статье я попробую написать вектор, который умеет расширяться без копирования элементов. Код приведён здесь. Сначала я покажу, что стандартный вектор не умеет расширяться без копирования/перемещения, потом обсужу придуманное решение, потом собственно приведу реализацию вектора, а в конце сравню производительность со стандартным вектором. Читать далее

https://habr.com/ru/post/701784/