Containers
Документация проекта контейнеров на C++
Обзор проекта
Проект включает реализацию различных контейнеров данных на языке C++ стандарта C++17. Контейнеры реализованы в виде шаблонных классов и включают базовые структуры данных, такие как списки, множества, словари, очереди, стеки и векторы. Основное внимание уделяется соблюдению стандартного поведения STL и принципов Google Style для написания кода.
Структура проекта
- src: Содержит исходный код библиотеки контейнеров.
- tests: Содержит unit-тесты для проверки функциональности контейнеров.
- Makefile: Содержит инструкции для сборки проекта, включая сборку тестов и очистку.
Реализация библиотеки
Основные контейнеры
Файл заголовка:
В этом заголовочном файле описаны основные контейнеры, включающие:
(Список)List
(Словарь)Map
(Очередь)Queue
(Множество)Set
(Стек)Stack
(Вектор)Vector
Примечания:
- Итераторы: Все контейнеры должны поддерживать итераторы.
- Шаблонные классы: Все классы контейнеров должны быть шаблонными.
- Пространство имен: Все классы должны быть реализованы в пространстве имен
.s21 - Классы и их реализации: Реализация классов должна быть разнесена по отдельным заголовочным файлам (
,s21_list.h
и т.д.). Заголовочный файлs21_map.h
будет включать в себя эти заголовочные файлы.s21_containers.h
Дополнительные контейнеры
Файл заголовка:
В этом заголовочном файле описаны дополнительные контейнеры:
(Массив)Array
(Мультимножество)Multiset
Примечания:
- Реализация классов должна учитывать классическую реализацию контейнеров.
- Все классы должны быть реализованы в пространстве имен
.s21
Реализация методов 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: Сборка всех целей, включая библиотеку и тесты.