Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб роб Інф 4 семестр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
79.07 Кб
Скачать

Лабораторна робота 6

Тема: Шаблони функцій. Шаблони класів. Спеціалізації шаблонів.

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

  1. Мета використання шаблонів функцій та класів.

  2. Порівняйте макроси та шаблони функцій.

  3. Поняття шаблону функції. Правила визначення.

  4. Який зв’язок між шаблонами функцій та перевантаженими функціями?

  5. Типовані та нетиповані параметри шаблонів.

  6. Що може бути фактичним параметром для типованого параметра? Нетипованого параметра шаблону?

  7. Коли використовують нетиповані параметри?

  8. Чому шаблон класу називають параметризованим типом?

  9. Конкретизація шаблону функції . Явна та неявна.

  10. Спеціалізація шаблону функції.

  11. Поняття шаблону класу. Визначення. Конкретизація.

  12. Визначення функцій-елементів за межами шаблону класу. Правила.

  13. Спеціалізація шаблону класу. Мета.

  14. Повна та часткові спеціалізації.

  15. Шаблон класу А має 2 типованих параметри. Створено повну та часткову спеціалізацію шаблону класу. Наведіть приклад заголовків шаблону класу та його спеціалізацій. Створіть екземпляри так, щоб використовувалися а) загальний шаблон класу; б)повна спеціалізація шаблону; в) часткова спеціалізація шаблону.

  16. Розташуйте за пріоритетом: шаблон функції, звичайна функція, спеціалізація шаблону.

  17. Клас А має перевизначені операції = та ==. Які типи даних можуть бути фактичними параметрами шаблону? У якому випадку користувацький тип даних(структура, клас) може бути фактичним параметром шаблону?

  18. Що можуть означати рядки деякої програми:

Array<Employee> workList;

Array<Employee> workList(10);

template <typename T> Array<T>::Array(int s);

  1. Знайдіть помилки:

А) template <class T>

T square(T number)

{return T * T;}

Б) template <class T>

int square(int number)

{return number * number;}

В) template <class T1, class T2>

T1 sum(T1 x, T1 y)

{return x + y;}

Завдання 1. Визначити узагальнені функції для

  1. Виводу елементів масиву на екран

  2. Розв’язування задачі згідно варіанту.

Перевірити роботу шаблонів функцій для масивів різного типу. При цьому використовувати явну та неявні форми конкретизації шаблону.

Варіанти:

  1. Впорядкування масиву методом бульбашки(камінця чи ін.).

  2. Лінійний пошук елемента у масиві. Функція має повертати індекс знайденого елемента, або – 1 у інакшому випадку.

  3. Обчислення кількості входжень заданого елемента масиву.

  4. Перестановка елементів масиву.

  5. Зміна кожного елемента масиву за певним правилом(формулою). Формула зміни – додатковий параметр(вказівник на функцію).

  6. Бінарний пошук елемента у впорядкованому масиві. Функція має повертати індекс знайденого елемента, або – 1 у інакшому випадку.

  7. Підрахунок числа елементів масиву, що задовольняють певному критерію. Критерій задається додатковим параметром як вказівник на логічну функцію одного параметра.

  8. Копіювання елементів, що задовольняють певній умові у інший масив. Умова задається як додатковий параметр(вказівник на логічну функцію одного параметра).

  9. Видалення із масиву усіх елементів, що рівні заданому значенню.

  10. Пошук першого входження елемента, що задовольняє вказаному критерію. Критерій задається додатковим параметром як вказівник на логічну функцію одного параметра.

  11. Видалення повторних входжень елементів у впорядкованому масиві. Наприклад, після обробки масиву 1,1,1,2,2,2,3,3,4 маємо отримати масив 1,2,3,4.

  12. Злиття двох масивів у третій: спочатку елементи першого масиву, потім другого.

  13. Копіювання одного масиву у другий в оберненому порядку.

  14. Перерозподіл елементів масиву відносно заданого елемента. Спочатку у масиві розміщуються елементи, менші заданого у порядку їх зустрічі, потім елементи більші рівні заданого.

  15. Обертання масиву.

Завдання 2. Визначити спеціалізацію шаблону функції завдання 1для типу char*(С-рядок).

Завдання 3. Визначити шаблон класу, використовуючи поле масив чи динамічний масив. Перевірити роботу шаблону класу для типів int, double та деякого простого класу(Персона. Студент, Книга чи ін.).

Варіанти:

  1. Вектор. Операції [], =. Методи: перевірка чи вектор пустий, добавлення елемента у кінець вектора, видалення елемента з кінця вектора, видалення елемента за вказаним номером.

  2. Стек. Максимальний розмір стеку фіксується(нетипований параметр шаблону). Методи: перевірка чи стек пустий, добавлення елемента на вершину стеку, вилучення елемента на вершині стеку, подивитися елемент на вершині стеку, очистка стеку.

  3. Масив. Розмір масиву фіксується(нетипований параметр шаблону). Операції []. Методи: пошук у масиві числа, вивід масиву, впорядкування масиву за зростанням(спаданням) значень.

  4. Черга. Максимальний розмір черги фіксується(нетипований параметр шаблону). Методи: перевірка чи черга пуста, чи повна, добавлення елемента у кінець черги, вилучення елемента на початку черги, подивитися що на початку черги, подивитися що у кінці черги, очистка черги.

  5. Вектор. Операції [], =. Методи: перевірка чи вектор пустий, добавлення елемента у кінець вектора, вставка елемента у певну позицію, очистка вектора.

  6. Черга з пріоритетами. Розмір черги фіксується(нетипований параметр шаблону). Методи: перевірка чи черга пуста, чи повна, добавлення елемента у кінець черги, вилучення елемента згідно його пріоритету, подивитися що на початку черги, подивитися що у кінці черги, очистка черги, кількість елементів черги.

  7. Множина. Множина не повинна містити повторів(всі значення унікальні). Методи: додавання елемента у множину, перевірка входження елемента у множину, вивід елементів множини у впорядкованому вигляді.

  8. Стек(динамічний масив). Методи: перевірка чи вектор пустий, добавлення елемента на початок вектора, вилучення елемента на початку вектора, подивитися що на вершині стеку, очистка стеку, число елементів стеку.

  9. Множина. Допускаються повтори елементів у множині. Методи: додавання елемента у множину, перевірка входження елемента у множину, вивід елементів множини у впорядкованому вигляді, кількість елементів множини.

  10. Двостороння черга. Методи: перевірка чи черга пуста, добавлення елемента на початок та у кінець черги, вилучення елемента як на початку так і у кінці черги, подивитися що на початку черги, подивитися що у кінці черги, очистка черги.

  11. Множина. Множина не повинна містити повторів(всі значення унікальні). Методи: додавання елемента у множину, вивід елементів множини у впорядкованому вигляді, операція + (об’єднання множин).

  12. Масив. Розмір масиву фіксується(нетипований параметр шаблону). Операції [], ==, !=. Методи: обмін значеннями між даним масивом та іншим масивом, трансформація масиву за певною формулою.

  13. Черга з пріоритетами. Методи: перевірка чи черга пуста, добавлення елемента згідно пріоритету(більше число - вищий пріоритет, вилучення елемента на початку черги, подивитися що на початку черги, подивитися що у кінці черги, очистка черги, кількість елементів черги.

  14. Вектор. Операції [], =, +. Методи: перевірка чи вектор пустий, добавлення елемента у кінець вектора, видалення елемента з кінця вектора, видалення елементів, розміщених у вказаному діапазоні індексів.

  15. Множина. Множина не повинна містити повторів(всі значення унікальні). Методи: додавання елемента у множину, вивід елементів множини у впорядкованому вигляді, видалення елементі з множини, число елементів у множині..