РГР

Загрузка отчета

Курс в ЭИОС: https://eios.sibsutis.ru/course/view.php?id=2280

Кодовое слово: cpp-XX-YYY, где XX-YYY — группа. Например: cpp-IV-121

Цель

Реализовать шаблон класса для структуры данных в соответствии со своим вариантом. Реализовать итераторы, совместимые с алгоритмами стандартной библиотеки. Покрыть тестами.

Считаем, что вы полностью реализуете управление ресурсами, поэтому внутри классов не используйте контейнеры стандартной библиотеки.

Для выполнения работы создан репозиторий с префиксом rgr: cpp2023

Вариантов немного, поэтому возможны повторы: не более двух человек на одном варианте в пределах группы. При этом работа остается индивидуальной.

Шаблон отчета

cpp_report_template.docx

Шаблон подготовлен в LibreOffice и может некорректно отображаться в MS Office, обращайте внимание на артефакты.

  1. Для оформления используйте стили (Heading 2, Heading 3, First Line Indent, preformatted text и др., см. шаблон).

  2. Выделенные фрагменты — точки кастомизации. После вписывания своего текста уберите выделение.

  3. В списке источников указывайте все использованные материалы, в т.ч. ссылки на блоги, youtube, онлайн курсы и ответы на stackoverflow. Для управления списком источников и ссылками можете использовать Zotero.

Варианты

  1. FlatMap

  2. FlatSet

  3. HashMap (открытая адресация)

  4. HashSet (открытая адресация)

  5. HashMap (метод цепочек)

  6. HashSet (метод цепочек)

  7. TreeMap

  8. TreeSet

  9. SmallVector — вектор с дополнительным параметром N (количество элементов, хранимых на стеке).

  10. Graph

  11. Matrix

  12. Vector + COW

  13. String + COW

  14. StableVector — вектор со стабильными итераторами/указателями на элементы.

  15. PackedVector — вектор, использующий для хранения одного элемента N заданных бит.

Для всех типов, управляющих ресурсами нужно реализовать пять специальных методов.

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

  1. operator[]

  2. at

  3. resize, reserve

  4. begin, end, rbegin, rend

  5. empty

  6. size, capactiy

  7. shrink_to_fit

  8. insert

  9. push_back

  10. erase

Для ассоциативных контейнеров:

  1. operator[]

  2. at

  3. begin, end,

  4. rbegin, rend (если допускает категория итератора)

  5. empty

  6. insert

  7. insert_or_assign

  8. erase

  9. find

  10. contains

Для множеств:

  1. begin, end,

  2. rbegin, rend (если допускает категория итератора)

  3. empty

  4. insert

  5. merge

  6. erase

  7. find

  8. contains

Возможные проблемы

Задание предполагает самостоятельное исследование: в чем особенности выбранной структуры данных. Если вы впервые показываете работу в последний момент или после срока, могут появиться неожиданные замечания вплоть до полного несоответствия реализации ожиданиям. Это скажется на оценке, и времени на исправления не останется.