Проект s21_containers — это библиотека контейнеров на языке C++, включающая собственные реализации стандартных контейнеров, таких как list
, map
, queue
, set
, stack
, vector
, а также дополнительных контейнеров — array
, multiset
. Все контейнеры реализованы в соответствии с требованиями стандарта C++17 и поддерживают стандартные методы управления и доступа к данным. Библиотека также предусматривает работу с итераторами и предоставляет шаблонные классы для обобщённого программирования. Проект в рамках школы 21. Написано по Google Style.
.
├── LICENSE
├── README.md
└── src
├── Makefile
├── array
│ ├── s21_array.h
│ └── s21_array.tpp
├── containers_tests
│ ├── array_tests
│ │ └── s21_array_test.cc
│ ├── list_tests
│ │ └── s21_list_test.cc
│ ├── map_tests
│ │ └── s21_map_test.cc
│ ├── multiset_tests
│ │ └── s21_multiset_test.cc
│ ├── queue_tests
│ │ └── s21_queue_test.cc
│ ├── set_tests
│ │ └── s21_set_test.cc
│ ├── stack_tests
│ │ └── s21_stack_test.cc
│ ├── test.cc
│ ├── test.h
│ └── vector_tests
│ └── s21_vector_test.cc
├── list
│ ├── internal_class.tpp
│ ├── s21_list.h
│ └── s21_list.tpp
├── map
│ ├── map_iterator.tpp
│ ├── map_support.tpp
│ ├── s21_map.h
│ └── s21_map.tpp
├── multiset
│ ├── s21_multiset.h
│ └── template
│ └── s21_multiset_template.tpp
├── queue
│ ├── s21_queue.h
│ └── s21_queue.tpp
├── s21_containers.h
├── s21_containersplus.h
├── set
│ ├── s21_set.h
│ └── template
│ ├── s21_set_iterator_template.tpp
│ └── s21_set_template.tpp
├── stack
│ ├── s21_stack.h
│ └── s21_stack.tpp
└── vector
├── s21_vector.h
└── s21_vector.tpp
s21_containers.h
: Основной заголовочный файл, содержащий подключения всех контейнеров.s21_list.h
,s21_map.h
,s21_queue.h
, и т.д.: Файлы с реализациями контейнеров.tests/
: Тесты для проверки корректности работы контейнеров, написанные с использованием Google Test.
В рамках библиотеки были реализованы следующие контейнеры:
- List: Двусвязный список для работы с элементами в последовательном порядке.
- Map: Ассоциативный контейнер, хранящий пары "ключ-значение".
- Queue: Очередь с доступом к элементам в порядке их добавления.
- Set: Множество, содержащее только уникальные элементы.
- Stack: Стек с доступом к элементам по принципу LIFO (последний пришёл — первый ушёл).
- Vector: Динамический массив с возможностью изменения размера.
Дополнительно реализованы контейнеры:
- Array: Статический массив с фиксированным размером.
- Multiset: Множество, поддерживающее дублирующиеся элементы.
- Шаблонные классы: Все контейнеры реализованы в виде шаблонов, что позволяет использовать их с любыми типами данных.
- Итераторы: Реализованы итераторы для всех контейнеров, обеспечивающие стандартные методы
begin()
,end()
, а также поддержка операций разыменования и сравнения итераторов. - Модификаторы контейнеров: Включает функции для добавления, удаления и поиска элементов, такие как
insert()
,erase()
,find()
. - Методы
insert_many
: Реализованы методы массового добавления элементов дляlist
,vector
,map
,set
,multiset
.
- C++17: Проект разработан в соответствии с требованиями стандарта C++17.
- Индивидуальные классы: Каждому контейнеру соответствует отдельный заголовочный файл с реализацией (
s21_list.h
,s21_map.h
и т.д.). - Без использования STL: В проекте запрещено использовать стандартную библиотеку контейнеров STL. Реализация контейнеров выполнена с нуля.
- Makefile: Поддержка Makefile с командами для сборки, тестирования и очистки проекта.
Все контейнеры полностью покрыты модульными тестами с использованием библиотеки Google Test. Для тестирования необходимо выполнить команду:
make test
Для генерации отчёта о покрытии кода:
make gcov_report
-
Клонируйте репозиторий:
git clone https://github.com/zkhrg/cpp-containers.git cd s21_containers
-
Сборка библиотеки:
make
-
Запуск тестов:
make test
- GCC (поддержка C++17)
- Google Test (для unit-тестирования)
- Gcov и LCOV (для покрытия кода тестами)