Ітератори – це сутності, що нагадують вказівники. Вони використовуються для одержання доступу до окремих даних (які звичайно називаються елементами) в контейнері. Аони часто використовуються для послідовного пересування по контейнеру від елемента до елемента (цей процес називається ітерацією). Ітератори можна інкрементувати за допомогою звичайного оператора ++, після виконання якого ітератор пересунеться на наступний елемент. Розадресування здійснюється оператором *, після чого можна одержати значення елемента, на який посилається ітератор. В STL ітератор являє собою об’єкт класу iterator.
Для різних типів контейнерів використовуються свої ітератори. Всього існує три основні класи ітераторів: прямі, двонапрямлені та з випадковим доступом. Прямий ітератор може проходити по контейнеру лише у прямому напрямку. Прохід здійснюється поелементно. Працювати з ним можна, використовуючи ++. Такий ітератор не може пересуватися у зворотньому напрямку і не може бути поставлений у довільне місце контейнера.
Двонаправлений ітератор, відповідно, може пересуватися в обох напрямках і реагує як на ++, так і на --.
Ітератор з випадковим доступом може і рухатися в обох напрямках і перестрибувати на довільне місце. контейнера.
Є два спеціалізовані типи ітеротів. Це вхідний ітератор, який може вказувати на пристрій вводу (cin чи вхідний файл) і зчитувати послідовно елементи даних в контейнер, і вихідний контейнер, який відповідно вказує на пристрій виводу (cout) чи вихідний файл і виводить елементи з контейнера.
В той час, як значення прямих, двонапрямлених ітераторів та ітераторів з випадковим доступом можуть бути збережені, значення вхідних і вихідних ітераторів зберігатися не можуть.
Алгоритми
Алгоритми STL виконують різні операції над наборами даних. Вони були розроблені спеціальні для контейнерів, але можуть застосовуватися також до звичайних масивів С++. Це може дуже спростити роботу з масивами.
Алгоритм find()
Цей алгоритм шукає перший елемент в контейнері, значення якого рівне вказаному. В прикладі 26.1 вказано, як потрібно діяти, якщо ми хочемо знайти значення в масиві цілих чисел.
#include<iostream>
#include<conio>
#include<algorithm>
using namespace std;
int arr[]={11,22,33,44,55,66,77,88};
int main()
{ int *ptr;
ptr=find(arr,arr+8,44);
cout<<"Pershyj object zi znachennam 44 v pozycii "
<<(ptr-arr+1)<<endl;
getch();
return 0;
}
Програма 15.1