Пишем на С++ вектор, умеющий расширяться без копирования элементов |
В языке С есть функции malloc
, free
и realloc
. При использовании последней вы можете написать этакий расширяющийся массив из примитивных типов или структур (классов-то нет), который, можно надеяться, не будет копировать все данные при каждом расширении. В С++ есть встроенный класс vector, который представляет из себя расщиряющийся массив, но он так не умеет: при каждом расширении вектора выделяется новый участок памяти и все элементы перемещаются на него (по возможности, с использованием move-семантики). Но ведь, если можно каждый раз не копировать все старые элементы на новое место, вектор должен работать быстрее? В этой статье я попробую написать вектор, который умеет расширяться без копирования элементов.
Код приведён здесь.
Сначала я покажу, что стандартный вектор не умеет расширяться без копирования/перемещения, потом обсужу придуманное решение, потом собственно приведу реализацию вектора, а в конце сравню производительность со стандартным вектором.
Читать далееhttps://habr.com/ru/post/701784/?utm_source=habrahabr&utm_medium=rss&utm_campaign=701784
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |