└── 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
- додати функцію сортування коллекції з використанням функтора
- додати функцію об'єднання двох класів-списків
- Додати можливість об’єднання двох STL-контейнерів типу
map
(в файліlist.hpp
).
map<string, list<string>>& mergeMaps(map<string, list<string>> &map1, map<string, list<string>> &map2);
При цьому, якщо в обох контейнерах існують однакові ключі, то значення повинні конкатенуватися, наприклад, якщо є дві мапи для країн:
- Мапа1:
- Україна : Харків, Київ;
- Росія: Москва, Бєлгород;
- Білорусь: Мінськ, Бобруйськ.
- Мапа2:
- Польща: Варшава;
- Росія: Санкт-Петербург;
- Україна: Харків, Запоріжжя;
то об’єднана мапа повинна містити таке:
- Україна: Харків, Київ, Запоріжжя;
- Росія: Москва, Бєлгород, Санкт-Петербург;
- Білорусь: Мінськ, Бобруйськ;
- Польща: Варшава.
- Зробити клас-список (з основного завдання) 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*
.
- Що таке стандартна бібліотека шаблонів?
- Які складові входять до STL?
- Наведіть приклад використання циклу range-for.
- Яка різниця між послідовними контейнерами vector та list?
- Яка різниця між послідовними контейнерами vector та set?
- Що таке "ітератор", яке його призначення?
- Які бувають ітератори?
- Які операції можуть застосовуватися до ітераторів?
- Що таке алгоритми у стандартній бібліотеці шаблонів?
- Які методи дозволяють об’єднувати колекції?
- Які методи дозволяють виконувати сортування у колекції за заданим критерієм для вказаного діапазону?
- Що таке функтор?
- Як працює контейнер map?
- Що таке алгоритми?
- Що таке біндери? Яки бувають типи біндерів?
- Що робить функція for_each ?
- Які функції дозволяють виконувати пошук у контейнері?
- Які функції дозволяють виконувати визначення кількості елементів у контейнері за заданими характеристиками?