Skip to content

vilfilll/cpp-advanced-vector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

C++ Advanced Vector

Реализация STL-подобного контейнера Vector<T> на C++17 с ручным управлением памятью, поддержкой move/copy-семантики и гарантиями исключений.

Проект демонстрирует работу с низкоуровневой памятью, проектирование контейнеров и реализацию механизмов, лежащих в основе std::vector.

Возможности

Управление памятью

  • отдельный слой сырой памяти RawMemory<T>;
  • ручное выделение и освобождение памяти через operator new / operator delete;
  • разделение памяти и жизненного цикла объектов.

Работа с контейнером

  • управление размером и ёмкостью:

    • Reserve
    • Resize
    • автоматический рост буфера
  • модификация содержимого:

    • PushBack
    • EmplaceBack
    • PopBack
    • Insert
    • Emplace
    • Erase
  • поддержка итераторов:

    • begin/end
    • cbegin/cend

Поддержка copy/move

  • конструкторы копирования и перемещения;
  • операторы присваивания;
  • оптимизация через move, когда перемещение безопаснее копирования;
  • использование std::is_nothrow_move_constructible_v.

Особенности реализации

Архитектура

Проект разделён на два уровня:

RawMemory<T>
      ↓
управление сырым буфером

Vector<T>
      ↓
управление объектами
  • RawMemory<T> отвечает только за выделение и освобождение памяти;
  • Vector<T> управляет жизненным циклом объектов и логикой контейнера.

Exception Safety

Реализована безопасная реаллокация и вставка:

  • перенос элементов в новый буфер;
  • откат изменений при выбросе исключений;
  • корректное уничтожение уже созданных объектов.

Работа с неинициализированной памятью

Используются механизмы:

  • placement new
  • std::destroy_n
  • std::uninitialized_copy
  • std::uninitialized_move

Тестирование

Проект содержит набор assert-тестов, проверяющих:

  • базовые операции контейнера;
  • copy/move-семантику;
  • корректность создания и уничтожения объектов;
  • сценарии с исключениями;
  • работу с нетривиальными типами.

Для тестирования используются вспомогательные типы:

  • Obj
  • TestObj

Тесты дополнительно отслеживают:

  • количество конструирований;
  • копирования;
  • перемещения;
  • уничтожения объектов.

Структура проекта

advanced-vector/
│
├── vector.h
│   ├── RawMemory<T>
│   └── Vector<T>
│
└── main.cpp
    └── assert-тесты

Сборка и запуск

g++

g++ -std=c++17 -Wall -Wextra -pedantic \
advanced-vector/main.cpp \
-o vector_tests

./vector_tests

Если программа завершилась без ошибок, все встроенные тесты успешно пройдены.


Используемые технологии

  • C++17
  • STL
  • Templates
  • RAII
  • Move semantics
  • Type traits
  • Placement new
  • Exception safety

About

Advanced Vector

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages