Алгоритми використовують ітератори у якості параметрів (інколи ще й значень, які повертають). Приклад 15.19 показує застосування алгоритму find() до списку. Ми знаємо, що це можливо, бо даному алгоритму потрібний лише вхідний ітератор.
#include<iostream>
#include<conio>
#include<algorithm>
#include<list>
using namespace std;
int main()
{
list<int>thelist(5);//порожній список з 5 елементів
list<int>::iterator iter;
int data=0;
for(iter=thelist.begin();iter!=thelist.end();iter++)
*iter=data+=2; //заповнення списку даними
iter=find(thelist.begin(),thelist.end(),8);//пошук 8
if(iter!=thelist.end())
cout<<"\nZnajdeno 8 \n";
else
cout<<"\nNe znajdeno 8 \n";
getch();
return 0;
}
Програма 15.19
Алгоритм find() має три параметри. Перші два – це значення ітераторів, які визначають діапазон елементів, по яких може відбуватися пошук. Третій – шукане значення. Контейнер заповнюється тими самими значеннями, що й у попередньому прикладі. Потім використовується алгоритм find() для знаходження числа 8. Якщо він повертає значення ilist.end(), ми розуміємо, що досягнутий кінець контейнера і шуканий елемент не знайдений. В іншому випадку повинне повернутися число 8, це означає, що елемент знайдений.
Чи можна за допомогою значення ітератора вияснити, де саме в контейнері розміщене число 8? Схоже що так. Можна знайти зміщення відносно початку (iter=ilist.begin() ). Однак це не є легальним використанням ітератора для списку, оскільки ітератор повинен бути двонапрямленим, а, отже, над ним не можна виконувати жодних арифметичних операцій. Так можна чинити з ітераторами довільного доступу, наприклад, використовуваними з векторами і чергами.
В наступному прикладі алгоритм використовує ітератори в якості аргумента. тут алгоритм copy() використовується з вектором. Користувач визначає діапазон розміщень, які повинні бути скопійовані з одного вектора в інший. Програма здійснює це копіювання. діапазон обчислюється з допомогою ітераторів.
//використання ітераторів з алгоритмом copy()
#include<iostream>
#include<conio>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int beginRange,endRange;
int arr[]={11,13,15,17,19,21,23,25,27,29};
vector<int>v1(arr,arr+10); //ініціалізований вектор
vector<int>v2(10); //неініціалізований вектор
cout<<"Vvedit diapazon copy, napr. 2 5 ";
cin>>beginRange>>endRange;
vector<int>::iterator iter1=v1.begin()+beginRange;
vector<int>::iterator iter2=v1.begin()+endRange;
vector<int>::iterator iter3;
//копіювати дані з v1 у v2
iter3=copy(iter1,iter2,v2.begin());
//iter3 - останній скопійований запис
iter1=v2.begin();
while(iter1!=iter3)
cout<<*iter1++<<" ";
cout<<endl;
getch();
return 0;
}
Програма 15.20