Этот проект является частью учебного курса Школы 21. В рамках этого проекта мы разработали стандартную библиотеку C++ STL с нуля, включая последовательные, ассоциативные и производные контейнеры. Этот образовательный проект развил наши навыки командной разработки, проектирования архитектуры перед реализацией, научил нас работать с шаблонами в C++ и укрепил навыки объектно-ориентированного программирования.
- Участники
- Начало работы
2.1. Необходимые компоненты
2.2. Шаги установки и полезные команды - Техническое задание
- Результаты тестов
- Standart Template Library (STL)
Участник команды | Зона ответственности |
---|---|
// sheritsh |
vector array |
// bradamar |
deque list queue stack |
// oznakban |
AVLTree set map |
// melodiea |
- Поддержка проекта и кода - Наработки по вектору и списку - Покрытие тестами |
Перед началом разработки, пожалуйста, установите следующие программы:
- Клонируйте репозиторий
- Запустите
make
- чтобы собрать проект и выполнить тесты make check_style
- чтобы проверить исходный код на соответствие стилю Googlemake leaks
/make valgrind
- чтобы проверить проект на утечки памяти и корректный доступ к памяти
Если вы хотите использовать 's21_containers.h' или 's21_containersplus.h', не забудьте использовать пространство имён s21 перед контейнерами.
Пример:
s21::array<int, 5> arr = {1, 2, 3, 4, 5};
- Язык программирования и компилятор:
- Программа реализована на C++17.
- Используйте компилятор GCC для компиляции.
- Организация кода:
- Организуйте код программы внутри папки src.
- Стиль кодирования:
- Следуйте рекомендациям по стилю кодирования Google для согласованности и читаемости.
- Пространство имён и шаблоны:
- Реализуйте классы в пространстве имён s21.
- Используйте шаблонные классы для реализации контейнеров с поддержкой разных типов.
- Классы контейнеров:
- Реализуйте классы контейнеров: list, map, queue, set, stack и vector.
- Предоставьте стандартные конструкторы (по умолчанию, копирования, перемещения, с использованием списка инициализации).
- Реализуйте методы для доступа, изменения и управления элементами контейнера.
- Включите методы для проверки, полон ли контейнер, или же он пуст.
- Итераторы:
- Реализуйте итераторы для каждого класса контейнера.
- Предоставьте методы begin() и end() для доступа к итераторам.
- Реализуйте операции для итераторов: *iter, ++iter, --iter, iter1 == iter2, iter1 != iter2.
- Модульное тестирование:
- Разработайте полное модульное тестирование с использованием библиотеки GTest.
- Обеспечьте покрытие тестами для всех методов контейнеров и крайних случаев.
- Логика STL и обработка исключений:
- Следуйте логике библиотеки Standart Template Library (STL) для проверок, обработки памяти и поведения в нестандартных ситуациях.
- Реализуйте соответствующую обработку исключений для ситуаций ошибок.
- Библиотека s21_containers.h:
- Реализуйте заголовочный файл s21_containers.h.
- Создайте отдельные заголовочные файлы (например, s21_list.h, s21_map.h) для каждой реализации класса контейнера.
- Основывайтесь на классических парадигмах контейнеров, с возможностью выбора алгоритмов.
- Makefile:
- Предоставьте Makefile для компиляции и тестирования библиотеки.
- Включите цели для очистки (clean) и тестирования (test).
- Библиотека s21_containersplus.h (Бонус):
- Реализуйте заголовочный файл s21_containersplus.h для дополнительных классов контейнеров.
- Включите классы: array и multiset.
- Основывайтесь на классических парадигмах, позволяющих настройку алгоритмов.
- Метод insert_many (Бонус):
- Расширьте классы контейнеров методом insert_many.
- Реализуйте варианты метода для разных контейнеров, как указано в таблице.
- Поддерживайте разное количество параметров с использованием механизма пакетных параметров.
- Документация и комментарии:
- Предоставьте четкие и лаконичные комментарии в коде, чтобы объяснить функциональность и логику.
- Включите необходимую документацию для классов и методов контейнеров.
- Тестирование и проверка:
- Тщательно протестируйте все реализованные классы и методы на корректность и эффективность.
- Включите граничные случаи и крайние ситуации в набор тестов.
- Завершающие материалы:
- Представьте завершенный проект, включая исходный код, заголовочные файлы, Makefile и набор тестов.
С использованием фреймворка Google Test были созданы тесты для всех контейнеров и их методов, включая обработку ошибок. Это обеспечивает полное тестирование кода и гарантирует правильное поведение программы, включая правильную обработку ошибок.