GithubHelp home page GithubHelp logo

marg-s / mycontainerscpp Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 32 KB

My own library that implements the basic standard C++ container classes: list, map, queue, set, stack, vector, array, multiset

Makefile 1.01% C++ 98.73% C 0.26%

mycontainerscpp's Introduction

MyContainersCPP

Реализация библиотек my_containers.h и my_containersplus.h.

В данном проекте библиотека my_containers.h реализует основные стандартные контейнерные классы языка С++: list (список), map (словарь), queue (очередь), set (множество), stack (стек) и vector (вектор). Библиотека my_containersplus.h реализует контейнерные классы языка С++:array (массив), multiset (мультимножество).

Реализации предоставляют набор стандартных методов и атрибутов для работы с элементами, проверкой заполненности контейнера и итерирования.

Каждый вид контейнеров предоставляет пользователю следующие методы:

  • стандартные конструкторы (конструктор по умолчанию, конструктор копирования, конструктор перемещения, конструктор со списком инициализации);

  • методы доступа к элементам контейнера (например, осуществление доступа к элементу с индексом i);

  • методы проверки наполненности контейнера (например, количество элементов в контейнере, проверка на пустоту контейнера);

  • методы изменения контейнера (удаление и добавление новых элементов, очистка контейнера);

  • методы для работы с итератором контейнера.

Итераторы обеспечивают доступ к элементам контейнера. Для каждого контейнера конкретный тип итератора будет отличаться. Это связано с различным видом организации наборов объектов в контейнерных классах, а также с фактической реализацией контейнера. Итераторы реализуются в таком виде, чтобы они работали схожим образом с указателем на элемент массива языка С. Именно такой подход через использование итераторов и позволяет взаимодействовать с любыми контейнерами одинаковым образом. Через методы begin() и end() контейнеры предоставляют итераторы, которые указывают на первый и следующий после последнего элементы контейнера соответственно.

Над итератором iter определены следующие операции:

  • *iter: получение элемента, на который указывает итератор;

  • ++iter: перемещение итератора вперед для обращения к следующему элементу;

  • --iter: перемещение итератора назад для обращения к предыдущему элементу;

  • iter1 == iter2: два итератора равны, если они указывают на один и тот же элемент;

  • iter1 != iter2: два итератора не равны, если они указывают на разные элементы.


Контейнеры реализованы на основе шаблонных классов.

Контейнеры подразделяются на два основных типа: последовательные и ассоциативные. Для нахождения элемента в последовательных контейнерах (list, vector, array, stack, queue) необходимо последовательно просмотреть весь контейнер, в то время как в ассоциативных (map, set, multiset) достаточно обратиться по ассоциированному с значением ключу.

Спецификации

Библиотека my_containers.h:
List
Map
Queue
Set
Stack
Vector

Библиотека my_containersplus.h:
Array
Multiset

Реализация библиотек

  • Программа разработана на языке C++ стандарта C++17 с использованием компилятора g++;
  • Код соответствует Google Style;
  • Используются итераторы;
  • Классы шаблонные;
  • Классы реализованы внутри пространства имен mycontainers;
  • Подготовлено покрытие unit-тестами методов контейнерных классов c помощью библиотеки GTest;
  • Соблюдена логика работы стандартной библиотеки шаблонов (STL) (в части проверок, работы с памятью и поведения в нештатных ситуациях).
  • Решение оформлено в виде заголовочных файлов my_containers.h и my_containersplus.h, которые включают в себя другие заголовочные файлы с реализациями необходимых контейнеров (my_list.h, my_map.h и т.д.);
  • Предусмотрен Makefile для тестов написанных библиотек (с целями all, clean, test, gcov_report);

mycontainerscpp's People

Contributors

marg-s avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.