Skip to content

Latest commit

 

History

History
110 lines (89 loc) · 9.61 KB

README_RUS.md

File metadata and controls

110 lines (89 loc) · 9.61 KB

s21_containers

s21_containers

Этот проект является частью учебного курса Школы 21. В рамках этого проекта мы разработали стандартную библиотеку C++ STL с нуля, включая последовательные, ассоциативные и производные контейнеры. Этот образовательный проект развил наши навыки командной разработки, проектирования архитектуры перед реализацией, научил нас работать с шаблонами в C++ и укрепил навыки объектно-ориентированного программирования.

Содержание

  1. Участники
  2. Начало работы
    2.1. Необходимые компоненты
    2.2. Шаги установки и полезные команды
  3. Техническое задание
  4. Результаты тестов
  5. Standart Template Library (STL)

Участники

Участник команды Зона ответственности
sheritsh_avatar
// sheritsh
vector
array
bradamar_avatar
// bradamar
deque
list
queue
stack
oznakban_avatar
// oznakban
AVLTree
set
map
melodiea_avatar
// melodiea
- Поддержка проекта и кода
- Наработки по вектору и списку
- Покрытие тестами

Начало Работы

Необходимые компоненты

Перед началом разработки, пожалуйста, установите следующие программы:

Шаги установки и полезные команды

  • Клонируйте репозиторий
  • Запустите make - чтобы собрать проект и выполнить тесты
  • make check_style - чтобы проверить исходный код на соответствие стилю Google
  • make leaks / make valgrind - чтобы проверить проект на утечки памяти и корректный доступ к памяти

Если вы хотите использовать 's21_containers.h' или 's21_containersplus.h', не забудьте использовать пространство имён s21 перед контейнерами.

Пример:

s21::array<int, 5> arr = {1, 2, 3, 4, 5};

Техническое задание

  1. Язык программирования и компилятор:
  • Программа реализована на C++17.
  • Используйте компилятор GCC для компиляции.
  1. Организация кода:
  • Организуйте код программы внутри папки src.
  1. Стиль кодирования:
  • Следуйте рекомендациям по стилю кодирования Google для согласованности и читаемости.
  1. Пространство имён и шаблоны:
  • Реализуйте классы в пространстве имён s21.
  • Используйте шаблонные классы для реализации контейнеров с поддержкой разных типов.
  1. Классы контейнеров:
  • Реализуйте классы контейнеров: list, map, queue, set, stack и vector.
  • Предоставьте стандартные конструкторы (по умолчанию, копирования, перемещения, с использованием списка инициализации).
  • Реализуйте методы для доступа, изменения и управления элементами контейнера.
  • Включите методы для проверки, полон ли контейнер, или же он пуст.
  1. Итераторы:
  • Реализуйте итераторы для каждого класса контейнера.
  • Предоставьте методы begin() и end() для доступа к итераторам.
  • Реализуйте операции для итераторов: *iter, ++iter, --iter, iter1 == iter2, iter1 != iter2.
  1. Модульное тестирование:
  • Разработайте полное модульное тестирование с использованием библиотеки GTest.
  • Обеспечьте покрытие тестами для всех методов контейнеров и крайних случаев.
  1. Логика STL и обработка исключений:
  • Следуйте логике библиотеки Standart Template Library (STL) для проверок, обработки памяти и поведения в нестандартных ситуациях.
  • Реализуйте соответствующую обработку исключений для ситуаций ошибок.
  1. Библиотека s21_containers.h:
  • Реализуйте заголовочный файл s21_containers.h.
  • Создайте отдельные заголовочные файлы (например, s21_list.h, s21_map.h) для каждой реализации класса контейнера.
  • Основывайтесь на классических парадигмах контейнеров, с возможностью выбора алгоритмов.
  1. Makefile:
  • Предоставьте Makefile для компиляции и тестирования библиотеки.
  • Включите цели для очистки (clean) и тестирования (test).
  1. Библиотека s21_containersplus.h (Бонус):
  • Реализуйте заголовочный файл s21_containersplus.h для дополнительных классов контейнеров.
  • Включите классы: array и multiset.
  • Основывайтесь на классических парадигмах, позволяющих настройку алгоритмов.
  1. Метод insert_many (Бонус):
  • Расширьте классы контейнеров методом insert_many.
  • Реализуйте варианты метода для разных контейнеров, как указано в таблице.
  • Поддерживайте разное количество параметров с использованием механизма пакетных параметров.
  1. Документация и комментарии:
  • Предоставьте четкие и лаконичные комментарии в коде, чтобы объяснить функциональность и логику.
  • Включите необходимую документацию для классов и методов контейнеров.
  1. Тестирование и проверка:
  • Тщательно протестируйте все реализованные классы и методы на корректность и эффективность.
  • Включите граничные случаи и крайние ситуации в набор тестов.
  1. Завершающие материалы:
  • Представьте завершенный проект, включая исходный код, заголовочные файлы, Makefile и набор тестов.

Результаты тестов

С использованием фреймворка Google Test были созданы тесты для всех контейнеров и их методов, включая обработку ошибок. Это обеспечивает полное тестирование кода и гарантирует правильное поведение программы, включая правильную обработку ошибок.

test_results

Standart Template Library (STL)

uml