На этом шаге мы рассмотрим обратное преобразование итераторов.
Обратный итератор можно снова преобразовать в обычный. Для этой цели обратные итераторы поддерживают функцию base():
namespace std { template <class Iterator> class reverse_iterator ... { . . . . . Iterator base() const; . . . . . }; }
Пример использования base():
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <iterator> #include <list> #include <algorithm> #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } int main(int argc, char* argv[]) { list<int> coll; // Вставка элементов от 1 до 9 for (int i=1; i<=9; ++i) { coll.push_back(i); } // Поиск позиции элемента со значением 5 list<int>::iterator pos; pos = find (coll.begin(), coll.end(), // Интервал 5); // Значение // Вывод значения элемента cout << ToRus("Значение элемента pos: ") << *pos << endl; // Преобразование итератора в обратный итератор list<int>::reverse_iterator rpos(pos); // Вывод значения элемента, на который ссылается обратный итератор cout << ToRus("Значение элемента, на который ссылается обратный итератор rpos:" ) << *rpos << endl; // Преобразование обратного итератора в обычный list<int>::iterator rrpos; rrpos = rpos.base(); // Вывод значения элемента, на который ссылается итератор cout << ToRus("Значение элемента, на который ссылается итератор rrpos: ") << *rrpos << endl; getch(); return 0; } //---------------------------------------------------------------------------
Результат выполнения программы выглядит так:
Рис.1. Результат работы приложения
Преобразование *rpos.base() эквивалентно преобразованию обратного итератора. Иначе говоря, физическая позиция (элемент, на который ссылается итератор) сохраняется, а логическая позиция (значение элемента) перемещается.
Со следующего шага мы будем знакомиться с итераторами вставки.