Skip to content

Библиотека на C++, реализующая стандартные контейнеры, такие как list, map, queue, set, stack и vector. Проект следует стандарту C++17 и не использует STL.

License

Notifications You must be signed in to change notification settings

zkhrg/cpp-containers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

s21_containers

Описание

Проект s21_containers — это библиотека контейнеров на языке C++, включающая собственные реализации стандартных контейнеров, таких как list, map, queue, set, stack, vector, а также дополнительных контейнеров — array, multiset. Все контейнеры реализованы в соответствии с требованиями стандарта C++17 и поддерживают стандартные методы управления и доступа к данным. Библиотека также предусматривает работу с итераторами и предоставляет шаблонные классы для обобщённого программирования. Проект в рамках школы 21. Написано по Google Style.

Структура проекта

.
├── LICENSE
├── README.md
└── src
    ├── Makefile
    ├── array
    │   ├── s21_array.h
    │   └── s21_array.tpp
    ├── containers_tests
    │   ├── array_tests
    │   │   └── s21_array_test.cc
    │   ├── list_tests
    │   │   └── s21_list_test.cc
    │   ├── map_tests
    │   │   └── s21_map_test.cc
    │   ├── multiset_tests
    │   │   └── s21_multiset_test.cc
    │   ├── queue_tests
    │   │   └── s21_queue_test.cc
    │   ├── set_tests
    │   │   └── s21_set_test.cc
    │   ├── stack_tests
    │   │   └── s21_stack_test.cc
    │   ├── test.cc
    │   ├── test.h
    │   └── vector_tests
    │       └── s21_vector_test.cc
    ├── list
    │   ├── internal_class.tpp
    │   ├── s21_list.h
    │   └── s21_list.tpp
    ├── map
    │   ├── map_iterator.tpp
    │   ├── map_support.tpp
    │   ├── s21_map.h
    │   └── s21_map.tpp
    ├── multiset
    │   ├── s21_multiset.h
    │   └── template
    │       └── s21_multiset_template.tpp
    ├── queue
    │   ├── s21_queue.h
    │   └── s21_queue.tpp
    ├── s21_containers.h
    ├── s21_containersplus.h
    ├── set
    │   ├── s21_set.h
    │   └── template
    │       ├── s21_set_iterator_template.tpp
    │       └── s21_set_template.tpp
    ├── stack
    │   ├── s21_stack.h
    │   └── s21_stack.tpp
    └── vector
        ├── s21_vector.h
        └── s21_vector.tpp
  • s21_containers.h: Основной заголовочный файл, содержащий подключения всех контейнеров.
  • s21_list.h, s21_map.h, s21_queue.h, и т.д.: Файлы с реализациями контейнеров.
  • tests/: Тесты для проверки корректности работы контейнеров, написанные с использованием Google Test.

Основные контейнеры

В рамках библиотеки были реализованы следующие контейнеры:

  • List: Двусвязный список для работы с элементами в последовательном порядке.
  • Map: Ассоциативный контейнер, хранящий пары "ключ-значение".
  • Queue: Очередь с доступом к элементам в порядке их добавления.
  • Set: Множество, содержащее только уникальные элементы.
  • Stack: Стек с доступом к элементам по принципу LIFO (последний пришёл — первый ушёл).
  • Vector: Динамический массив с возможностью изменения размера.

Дополнительные контейнеры

Дополнительно реализованы контейнеры:

  • Array: Статический массив с фиксированным размером.
  • Multiset: Множество, поддерживающее дублирующиеся элементы.

Функциональные возможности

  • Шаблонные классы: Все контейнеры реализованы в виде шаблонов, что позволяет использовать их с любыми типами данных.
  • Итераторы: Реализованы итераторы для всех контейнеров, обеспечивающие стандартные методы begin(), end(), а также поддержка операций разыменования и сравнения итераторов.
  • Модификаторы контейнеров: Включает функции для добавления, удаления и поиска элементов, такие как insert(), erase(), find().
  • Методы insert_many: Реализованы методы массового добавления элементов для list, vector, map, set, multiset.

Особенности реализации

  • C++17: Проект разработан в соответствии с требованиями стандарта C++17.
  • Индивидуальные классы: Каждому контейнеру соответствует отдельный заголовочный файл с реализацией (s21_list.h, s21_map.h и т.д.).
  • Без использования STL: В проекте запрещено использовать стандартную библиотеку контейнеров STL. Реализация контейнеров выполнена с нуля.
  • Makefile: Поддержка Makefile с командами для сборки, тестирования и очистки проекта.

Тестирование

Все контейнеры полностью покрыты модульными тестами с использованием библиотеки Google Test. Для тестирования необходимо выполнить команду:

make test

Для генерации отчёта о покрытии кода:

make gcov_report

Установка и сборка

  1. Клонируйте репозиторий:

    git clone https://github.com/zkhrg/cpp-containers.git
    cd s21_containers
  2. Сборка библиотеки:

    make
  3. Запуск тестов:

    make test

Зависимости

  • GCC (поддержка C++17)
  • Google Test (для unit-тестирования)
  • Gcov и LCOV (для покрытия кода тестами)

About

Библиотека на C++, реализующая стандартные контейнеры, такие как list, map, queue, set, stack и vector. Проект следует стандарту C++17 и не использует STL.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published