Итер-ры обеспечивают доступ к значениям данных и, кроме того,позволяют опред-ть промежутки для циклич-х операций над множествен-ми элементами данных. Итер-ры очень близки к указателям. Классы-итер-ры могут создавать итер-ры для передачи их алгоритмам ,обрабатыв-м данные контейнеры.Подобно указателям, Чтобы получить данные итер-ра его необходимо разименоватьс помощью операции «*» .Перебор набора данных осуществляется с помощью операции инкрименто итератора ++.Если выполнение этой ф-ции приводит к переходу итер-ра за последнее значения контейнера,итер-ор принимает значение за пределами (past the end) что эквивалентно нулевому указателю. Разименование такого итер-ра неразрешимо.
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
vector<int> intvector(100);
void main(){
int vector[20]=50;
(1) vector<int>::iterator intiter=find(int vector.begin(),
intvector.end(),50);
if (intiter!=invector.end())
cout<<”vector has value”<*intiter<<endl;
else cout<<”vector does not contain 50<<endl;
}
в программе опред-ся vector из 100 значений типа int, для чего использ-ся стандартный шаблон класса контейнера vector<>. В строке (1) итер-р intiter опред-н с помощью типа Iterator шаблона класса контейнера vector<int>,что позволяет корректно использовать его для доступа к значениям данных контейнера.Программа передает в ф-цию Find еще 2-а итер-ра,создавая ф-ции контейнера begin и end. Ф-ция begin возвращает итер-р для 1-го элемента контейнера.Ф-ция end возвращает значение за пределами (past the end).2-а итер-ра в совокупности опред-т диапазон данных контейнера,в котором следует осуществлять поиск значения 50.Результат ф-ции find присваевается intiter. Существует 5-ть типов итер-ов:
1)входные итер-ры:обеспечивают доступ к данным только для чтения.
2)выходные итер-ры:обеспечивают доступ к данным только для записи.
3)однонаправленные итер-ры:обеспеч-т чтение и запись к данным с однонаправленным(инкриментным)доступом к ним.
4)двунаправленные итер-ры:обеспечива-т чтение и запись к данным с 2-направлен-м(инкримнтно-дикремен-м)доступом
к ним.
5)итер-ры произвольного доступа:обеспечивают чтение и запись
с произвольным перемещением по данным.
Рассмотрим пример реализации выходного итер-ра.
double darray[10]={10,11,12,13,14,15,16,17,18,19};
vector<double> v double(10);
void main(){
vector<double>::iterator outputIterator=double.begin;
copy(darray,darray+10,outputIterator);
while(outputIterator!=v double.end()){
cout<<*outputIterator<<endl;
outputIterator++;
}}
Итераторы.
24 Фев, 2009