Проект 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.tpps21_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 (для покрытия кода тестами)