Containers
Документация проекта контейнеров на C++
Обзор проекта
Проект включает реализацию различных контейнеров данных на языке C++ стандарта C++17. Контейнеры реализованы в виде шаблонных классов и включают базовые структуры данных, такие как списки, множества, словари, очереди, стеки и векторы. Основное внимание уделяется соблюдению стандартного поведения STL и принципов Google Style для написания кода.
Структура проекта
- src: Содержит исходный код библиотеки контейнеров.
- tests: Содержит unit-тесты для проверки функциональности контейнеров.
- Makefile: Содержит инструкции для сборки проекта, включая сборку тестов и очистку.
Реализация библиотеки
Основные контейнеры
Файл заголовка: s21_containers.h
В этом заголовочном файле описаны основные контейнеры, включающие:
List
(Список)Map
(Словарь)Queue
(Очередь)Set
(Множество)Stack
(Стек)Vector
(Вектор)
Примечания:
- Итераторы: Все контейнеры должны поддерживать итераторы.
- Шаблонные классы: Все классы контейнеров должны быть шаблонными.
- Пространство имен: Все классы должны быть реализованы в пространстве имен
s21
. - Классы и их реализации: Реализация классов должна быть разнесена по отдельным заголовочным файлам (
s21_list.h
,s21_map.h
и т.д.). Заголовочный файлs21_containers.h
будет включать в себя эти заголовочные файлы.
Дополнительные контейнеры
Файл заголовка: s21_containersplus.h
В этом заголовочном файле описаны дополнительные контейнеры:
Array
(Массив)Multiset
(Мультимножество)
Примечания:
- Реализация классов должна учитывать классическую реализацию контейнеров.
- Все классы должны быть реализованы в пространстве имен
s21
.
Реализация методов insert_many
Методы insert_many
должны быть реализованы для соответствующих контейнеров:
-
List, Vector:
iterator insert_many(const_iterator pos, Args&&... args)- List, Stack:
void insert_many_front(Args&&... args)- List, Stack:
void insert_many_front(Args&&... args)- Map, Set, Multiset:
vector<std::pair<iterator,bool>> insert_many(Args&&... args)Примечания
-
Аргументы: Аргументы передаются в виде параметрического пакета
Args&&... args
, что позволяет передавать переменное число параметров в функцию или метод.
Стиль кодирования
- Google Style: Код должен следовать стилю Google для C++.
- Итераторы: Используйте итераторы для обхода контейнеров.
- Шаблонные классы: Все классы должны быть реализованы как шаблонные.
- Реализация STL: Соблюдайте логику работы STL, особенно в части проверок, управления памятью и поведения в нештатных ситуациях.
Unit-тестирование
- Библиотека GTest: Все методы контейнеров должны быть полностью покрыты unit-тестами с использованием библиотеки GTest.
- Покрытие: Убедитесь, что тесты покрывают как можно больше функциональности и проверяют поведение в различных ситуациях.
Makefile
Файл Makefile должен содержать следующие цели:
- clean: Очистка файлов сборки.
- test: Запуск unit-тестов для проверки функциональности.
- all: Сборка всех целей, включая библиотеку и тесты.