Vector — это учебная реализация шаблонного контейнера, аналогичного std::vector, написанная на C++17 с нуля, без использования стандартных контейнеров STL. Проект демонстрирует глубокое понимание управления памятью, итераторов, семантики перемещения, обработки исключений и алгоритмов.
Реализация ориентирована на:
- Эффективность — минимальные накладные расходы, быстрый доступ по индексу.
- Надёжность — строгая гарантия безопасности исключений (
strong exception guarantee) для ключевых операций. - Совместимость — интерфейс максимально приближен к
std::vector, что упрощает переход и сравнение.
- Управление памятью через собственный класс
RawMemory<T>, который выделяет и освобождает сырую память без инициализации объектов. - Итераторы произвольного доступа (совместимы с STL-алгоритмами).
- Конструкторы:
- по умолчанию;
- от размера (с value-инициализацией);
- копирования;
- перемещения.
- Операторы присваивания (копирующий и перемещающий) с оптимизацией повторного использования буфера.
- Доступ к элементам через
operator[](без проверки границ) иat()(не реализован, но можно добавить). - Изменение размера:
PushBack/PopBack(вставка/удаление в конец).Reserve— предварительное выделение памяти.Resize— изменение количества элементов.
- Вставка и удаление в произвольной позиции:
Insert(копирующий и перемещающий).Emplace— создание элемента на месте с произвольными аргументами (perfect forwarding).Erase— удаление элемента по итератору.
- Исключительная безопасность:
- При копировании/перемещении элементов используется стратегия, учитывающая
noexcept-совместимость типов. - В случае ошибки состояние контейнера остаётся неизменным (где это возможно).
- При копировании/перемещении элементов используется стратегия, учитывающая