|
||||||||||||||||||||||||||||||||||
Ітератори. Алгоритми ⇐ ПредыдущаяСтр 3 из 3 Ітератори Ітератори використовуються для доступу до елементів контейнерів також, як вказівники використовуються для доступу до елементів масивів у С++. Ітератор є "розумним" покажчиком на елемент контейнера. На відміну від звичайного вказівника він пам'ятає повний тип даних на який посилається – з урахуванням типу контейнера, до елемента якого виконується звертання. Ітератори, як було зазначено, є центральним механізмом, що забезпечує роботу з даними контейнерів. Вони є аналогом покажчиків і уможливлюють циклічний перебір всіх елементів контейнера. Існують різні види ітераторів, оскільки різні алгоритми по-різному звертаються до даних. Кожен клас контейнера може породжувати ітератори, необхідні для роботи притаманних йому алгоритмів. У залежності від набору підтримуваних операцій розрізняють 5 типів ітераторів, що приведені в наступній таблиці.
Ітератор з довільним доступом реалізує повний набір операцій, що застосовуються до звичайних вказівників.
Алгоритми
Бібліотека STL надає основні види алгоритмів: · Математичні (розрахунок сум, добутків, генерація випадкових значень) · Пошуку (мінімальне значення, пошук послідовності, підрахунок числа значень) · Сортування · Роботи з послідовностями (об'єднання послідовностей, порівняння, обробки послідовності типовою операцією) Як уже зазначалось алгоритми призначені для маніпулювання елементами контейнера. Будь-який алгоритм розглядає вміст контейнера як послідовність, що задається ітераторами першого і наступного за останнім елементів. Ітератори забезпечують інтерфейс між контейнерами й алгоритмами, завдяки чому і досягається гнучкість і універсальність бібліотеки STL. Кожен алгоритм використовує ітератори визначеного типу. Наприклад, алгоритм простого пошуку (fіnd) переглядає елементи підряд, поки потрібний не буде знайдений. Для такої процедури цілком достатньо літератора вводу. З іншого боку, алгоритм більш швидкого двійкового пошуку (bіnary_search) повинен мати можливість переходити до будь-якого елемента послідовності, і тому вимагає ітератора з довільним доступом. Цілком природно, що замість менш функціонального ітератора можна передати алгоритмові більш функціональний, але не навпаки. Нижче наведений приклад контейнерного класу створеного користувачем.
Приклад побудови програми з використанням стандартної бібліотеки STL.
Завдання
Виконати завдання складається з двох етапів. Перший етап виконання роботи полягає у побудові програми розв’язання задачі згідно вказаних варіантів з використанням шаблонів-класів <vector> (клас масиву) , <algorithm> (клас алгоритмів) та ітератора бібліотеки STL. Використання шаблонів-класів здійснюється шляхом включення відповідних заголовочних файлів. Слід також використати основні методи контейнерних класів: - begin()- повернення ітератора до початкового елементу масиву контейнера, - end()- повернення ітератора на позицію останнього елементу контейнера, - size()-повернення кількості елементів масиву контейнера Бібліотека STL підтримує відповідний клас ітераторів, що містять основні методи(функції) роботи ітераторів, такі як: - pd++, ++pd - інкременти,переміщення ітератора по всім елементам контейнера, - *pd- розіменування ітератора,тобто повернення або присвоєння значення елемента контейнера,а також інші функії, такі як присвоєння одного ітератора іншому (pd1= pd2) або порівняння двох ітераторів(pd1== pd2). Запис у програмі при оголошенні ітератора, для прикладу, матиме вигляд: - vector<class T>:: iterator pd; де vector –шаблон класу, <class T>- базовий тип елементів даних контейнера, ::- унарна операція області видимості, iterator-ключове слово, pd-ім’я ітератора.
Другий етап роботи полягатиме у побудові програми розв’язання задачі згідно вказаних варіантів з використанням власного шаблону-класу <VECTOR> (клас контейнера масиву) та дружнього класу ітератора. Контейнерний клас повинен містити дані масиву та основні методи, що були вище обумовлені, як основні методи контейнерних класів. Клас ітераторів повинен мітити основні функції роботи ітераторів, що також обумовленні вище. При виконанні завдання звертайте увагу на вищенаведені приклади.
Варіант 1
Варіант 3
Варіант 4
Варіант 5
Варіант 6 Дана прямокутна матриця. Визначити номер рядка, в якому знаходиться найдовша серія з однакових елементів
|
||||||||||||||||||||||||||||||||||
|