Skip to content

Latest commit

 

History

History
95 lines (77 loc) · 5.86 KB

cpp-stl-core.md

File metadata and controls

95 lines (77 loc) · 5.86 KB

Вступ до Стандартної бібліотеки шаблонів STL

Структура директорії для лабораторної роботи

└── lab-cpp-06
    ├── Doxyfile
    ├── Makefile
    ├── README.md
    ├── doc
    │   └── lab-cpp-06.md
    ├── test
    │   └── test.cpp
    └── src
        ├── entity.hpp
        ├── list.hpp
        └── main.cpp

Загальне завдання

Поширити реалізацію лабораторної роботи "Поліморфірзм" наступним шляхом:

  • замінити масив та CRUD (create/read/update/delete) методи роботи з ним на використання STL
  • для предметної галузі з розділу Розрахункове завдання / Iндивідуальні завдання реалізувати/оновити всі методи роботи з колекцією на використання функцій STL
  • додати функцію сортування коллекції з використанням функтора
  • додати функцію об'єднання двох класів-списків

Додаткове завдання (на розсуд викладача)

  1. Додати можливість об’єднання двох STL-контейнерів типу map (в файлі list.hpp).
   map<string, list<string>>& mergeMaps(map<string, list<string>> &map1, map<string, list<string>> &map2); 

При цьому, якщо в обох контейнерах існують однакові ключі, то значення повинні конкатенуватися, наприклад, якщо є дві мапи для країн:

  • Мапа1:
    • Україна : Харків, Київ;
    • Росія: Москва, Бєлгород;
    • Білорусь: Мінськ, Бобруйськ.
  • Мапа2:
    • Польща: Варшава;
    • Росія: Санкт-Петербург;
    • Україна: Харків, Запоріжжя;

то об’єднана мапа повинна містити таке:

  • Україна: Харків, Київ, Запоріжжя;
  • Росія: Москва, Бєлгород, Санкт-Петербург;
  • Білорусь: Мінськ, Бобруйськ;
  • Польща: Варшава.
  1. Зробити клас-список (з основного завдання) STL ітеративним. Для демонстрації ітеративності, наступний код повинен працювати (Object - тип поточного базового класу):
MyList<Object> list;
for (Object &o : list) {
	// actions with object
}

Обов'язково забезпечити!!!

  • програма має мати документацію, що оформлена за допомогою утиліти doxygen;
  • робота повинна бути оформлена згідно "Вимогам до структурної побудови звіту";
  • продемонструвати відсутність витоків пам’яті за допомогою утиліти valgrind;
  • продемонструвати роботу розроблених методів за допомогою модульних тестів;
  • у звіті навести ступень покриття коду модульними тестами. 50% - є мінімально допустимим відсотком покриття коду тестами;
  • продемонструвати роботу розроблених методів за допомогою модульних тестів;
  • не використовувати конструкцію "using namespace std;", замість цього слід робити "using" кожного необхідного класу, наприклад: using std::string, using std::cout;
  • у проекті не повинні використовуватися бібліотеки введення / виведення мови C, а також не повинні використовуватися рядки типу char*.

Контрольні запитання

  1. Що таке стандартна бібліотека шаблонів?
  2. Які складові входять до STL?
  3. Наведіть приклад використання циклу range-for.
  4. Яка різниця між послідовними контейнерами vector та list?
  5. Яка різниця між послідовними контейнерами vector та set?
  6. Що таке "ітератор", яке його призначення?
  7. Які бувають ітератори?
  8. Які операції можуть застосовуватися до ітераторів?
  9. Що таке алгоритми у стандартній бібліотеці шаблонів?
  10. Які методи дозволяють об’єднувати колекції?
  11. Які методи дозволяють виконувати сортування у колекції за заданим критерієм для вказаного діапазону?
  12. Що таке функтор?
  13. Як працює контейнер map?
  14. Що таке алгоритми?
  15. Що таке біндери? Яки бувають типи біндерів?
  16. Що робить функція for_each ?
  17. Які функції дозволяють виконувати пошук у контейнері?
  18. Які функції дозволяють виконувати визначення кількості елементів у контейнері за заданими характеристиками?