русс | укр

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

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


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


Спеціалізовані ітератори


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


Далі ми розглянемо два спеціалізовані типи ітераторів: адаптери ітераторів, які можуть у досить незвичайний спосіб міняти поведінку звичайних ітераторів, та потокові ітератори, завдяки яким вхідні і вихідні потоки можуть поводитися як ітератори.

Адаптери ітераторів

В STL розрізняють три варіанти модифікації звичайного ітератора. Це зворотній ітератор, ітератор вставки та ітератор неініціалізованого зберігання. Зворотній ітератор дозволяє проходити контейнер у зворотньому напрямку. Ітератор вставки створений для зміни поведінки різних алгоритмів таких як copy() та merge(), так щоб вони саме вставляли дані, а не перезаписували існуючі. Ітератор неініціалізованого зберігання дозволяє зберігати дані в ділянці пам’яті, яка ще не ініціалізована. Він використовується у досить специфічних випадках, тому ми його не розглядатимемо.

 

Зворотні ітераоти

Припустімо, нам потрібно здійснювати ітерацію по контейнеру у зворотньому порядку. В такому випадку використовують зворотні ітератори. В програмі 15.21 показане застосування цього спеціалізованого ітератора для виведення вмісту списку у зворотньому порядку.

//зворотній ітератор

#include<iostream>

#include<conio>

#include<list>

using namespace std;

int main()

{int arr[]={2,4,6,8,10};

list<int>thelist;

for(int j=0;j<5;j++)

thelist.push_back(arr[j]);//перенести вміст масиву в список

list<int>::reverse_iterator rewit;//зворотній ітератор

rewit=thelist.rbegin(); //реверсна ітерація

while(rewit!=thelist.rend()) //по списку

cout<<*rewit++<<" "; //з виводом на екран

cout<<endl;

getch();

return 0;

}

 

 

Програма 15.21

При використанні зворотнього ітератора слід використовувати методи rbegin() та rend(). Цікаво, що проходження ітератора почнеться з кінця, при цьому викликається метод rbegin(). До того ж, значення ітератора потрібно інкрементувати при русі від елемента до елемента. При використанні reverse_ iterator ми рухаємося від rbegin() до rend(), інкрементується ітератор.

 


<== попередня лекція | наступна лекція ==>
Алгоритми та ітератори | Ітератори вставки


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