русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Алгоритми та ітератори


Дата додавання: 2014-04-22; переглядів: 949.


Алгоритми використовують ітератори у якості параметрів (інколи ще й значень, які повертають). Приклад 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

 


<== попередня лекція | наступна лекція ==>
Вставка даних | Спеціалізовані ітератори


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн