Containers

Форк
0

3 месяца назад
3 месяца назад
README.md

Документация проекта контейнеров на 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: Сборка всех целей, включая библиотеку и тесты.

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.