Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zapitannya_do_Informatiki.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
141.69 Кб
Скачать
  1. Шаблони функцій.

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

int abs ( int n) // обрахунок модулів цілих чисел

{

return (n>0) ? –n : n; // якщо негативне, повернути –n

}

Визначена вище функція бере аргумент типу int і повертає результат того ж типу. Але якщо уявити зараз, що знадобилось знайти модуль типу long. Потрібно писати таку ж функцію. Тіло функції нічим не буде відрізнятись. Та все ж таки, вони зовсім різні, оскільки обробляють аргументи і повертають значення різних типів. Вони можуть бути перевантаженими і мати різні імена. Але для кожного з них потрібно писати окреме визначення.

Багаторазове переписування таких функцій-близнят стомлює. Саме шаблони даних призначені для того, щоб писати функцію один раз і змусити її працювати з різними типами даних. Шаблон працює з усіма базовими числовими типами даних. В програмі спочатку визначається шаблонна версія abs(), а потім в main() відбувається перевірка правильності її роботи. Типи визначаються функцією при передачі аргумента.

Ось специфікація функції abs() для роботи з декількома типами даних:

template <class T> // шаблон функції

T abs(T n)

{

return (n>0) ? n : n; }

Вся конструкція починаючи з ключового слова template і включаючи визначення функції, називається шаблоном функції. Ключове слово template повідомляє компілятору, що ми визначаємо шаблон функції. Змінна Т називається аргументом класу. Всередині всього визначення шаблона будь-який конкретний тип даних, такий як int, заміняє аргумент Т.

  1. Шаблони класів.

Шаблонний принцип можна поширити на класи. В цьому випадку шаблони зазвичай використовуються, коли клас є сховищем даних. Стеки і зв’язні списки також типові приклади класів – сховищ даних. До цих пір всі приклади сховищ могли містити дані одного базового тип, наприклад могли зберігатись дані типу int . Якби захотілось зберігати дані типу long, довелося б писати абсолютно нове визначення класу. Подібним же образом нам довелося б створювати класи для зберігання даних кожного типу, якби не шаблони класів. З їх допомогою можна написати таку специфікацію класу, яка зберігає все, що запросять. Ідея шаблонних класів багато в чому сходиться з ідеєю шаблонних функцій.

template <class Type>

class Stack

{ // дані і методи використовують шаблонний аргумент Type }

Тут Stack є шаблонним класом. Ключові слова template і class Stack говорять про те, що весь клас буде шаблонним.

Шаблонний аргумент Type використовується замість фіксованого типу в усіх місцях специфікації класу, де є посилання на тип масиву st.

Шаблони класу відрізняються від шаблонів функцій способом реалізації. Для створення шаблонної функції ми викликаємо її з аргументами потрібного типу. Класи ж реалізуються з допомогою визначення об’єкта, який використовує шаблонний аргумент.

  1. Алгоритми стандартної бібліотеки stl.

Алгоритм – це функція, яка виконує деякі дії над елементами контейнера (контейнерів). Алгоритми в STL не є методами класів і навіть не є дружніми функціями по відношенню до контейнерів, як було раніше. В теперішньому стандарті мови алгоритми – це незалежні шаблонні функції. Їх можна використовувати при роботі як зі звичайними масивами С++, так і з власними класами – контейнерами.

Типові алгоритми STL:

find Повертає перший елемент із зазначенням значення

count Рахує кількість елементів, які мають зазначені значення

equal Порівнює вміст двох контейнерів і повертає true, якщо всі

відповідні

елементи еквівалентні

search Шукає послідовність значень в одному контейнері, яка відповідає

такій же у другому

copy Копіює послідовність значень із одного контейнера в інший ( або

в інше місце цього ж контейнера)

swap Обмінює значення, які зберігаються в різних місцях

iter swap Обмінює послідовності значень, які зберігаються в різних місцях

fill Копіює значення в послідовність комірок

sort Сортує значення у вказаному порядку

merge Комбінує два сортованих діапазони значень для одержання

найбільшого діапазону

accumulate Повертає суму елементів в заданому діапазоні

for each Виконує вказану функцію для кожного елемента контейнера

Алгоритми STL виконують різні операції над наборами даних. Були розроблені спеціально для контейнерів, але їх перевага в тому, що їх можна застосовувати до звичайних масивів С++.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]