Основная цель проекта - изучение принципов работы стандартных контейнеров C++ через их самостоятельную реализацию. В процессе разработки сознательно принимались некоторые неоптимальные решения там, где это способствовало лучшему пониманию внутренней механики STL.
Ключевые аспекты:
- Учебный характер реализации
- Акцент на понятность кода в ущерб максимальной оптимизации
- Эксперименты с различными подходами к реализации
- Подробные комментарии для объяснения сложных мест
- Командная работа в группе из 4 человек
Проект представляет собой полный цикл разработки - от проектирования классов до тестирования и небольших оптимизаций, что позволило комплексно изучить работу контейнеров стандартной библиотеки.
vegaklin
- vector
- array
- list
tandronaki
- queue
- stack
edmurepi
- binary_tree (база)
- set
- multiset
- map
dominnya
- тесты
- проверка памяти
- Makefile
- List: Двусвязный список
- Map: Ассоциативный массив на AWL-дереве
- Queue: FIFO Очередь (адаптер над list)
- Set: Множество уникальных элементов
- Stack: Стек LIFO (адаптер над list)
- Vector: Динамический массив
- Array: Статический массив фиксированного размера
- Multiset: Множество с дубликатами
- Гибридная балансировка:
- При вставке: жадный алгоритм без балансировки
- При удалении: полная балансировка дерева
- Полная поддержка STL-интерфейсов
- Реализация всех обязательных методов
- Поддержка move-семантики
- Итераторы для всех контейнеров
- Компилятор с поддержкой C++17 (GCC)
- Google Test для тестов
- LCOV для генерации отчетов покрытия
- Valgrind для проверки утечек памяти
- Тестировалось на Linux (GCC) macOS(GCC)
make test # Сборка и запуск всех тестов
make gcov_report # Генерация отчета о покрытии кода
make valgrind # Проверка на утечки памяти
make style_check # Проверка стиля кода
make clean # Очистка проекта