Итераторные адаптеры. Обратные итераторы

   
На этом шаге мы рассмотрим обратные итераторы.

   
Начиная с этого шага рассматриваются итераторные адаптеры - специальные итераторы, позволяющие выполнять
алгоритмы, которые поддерживают перебор элементов в обратном порядке, режим вставки и потоки данных.
Обратные итераторы

   
Обратные итераторы - адаптеры, переопределяющие операторы ++ и -- так, что перебор элементов производится в
обратном направлении. Следовательно, при использовании этих итераторов вместо обычных алгоритмы обрабатывают элементы в
обратном порядке. Все стандартные контейнерные классы позволяют использовать обратные итераторы для перебора элементов.
Рассмотрим следующий пример:

//---------------------------------------------------------------------------

#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;
}

void print (int elem)
{
  cout << elem << ' ';
}

int main(int argc, char* argv[])
{
  list<int> coll;

  // Вставка элементов от 1 до 9 
  for (int i=1; i<=9; ++i) {
    coll.push_back(i); 
  }

  // Вывод всех элементов в нормальном порядке
  cout << ToRus("Вывод элементов в прямом порядке:\n");
  for_each (coll.begin(),coll.end(),  // Интервал
            print); // Операция
  cout << endl;

 // Вывод всех элементов в обратном порядке
  cout << ToRus("Вывод элементов в обратном порядке:\n");
  for_each (coll.rbegin(),coll.rend(),  // Интервал
            print); // Операция
  cout << endl;

  getch();
  return 0;
}

//---------------------------------------------------------------------------

Текст этого примера можно взять здесь.

   
Функции rbegin() и rend() возвращают обратный итератор. По аналогии с функциями begin() и end()
эти итераторы определяют набор обрабатываемых элементов в виде полуоткрытого интервала, однако они производят перебор в
обратном направлении:

  • rbegin() возвращает позицию первого элемента при обратном переборе (то есть позицию последнего элемента контейнера);
  • rend() возвращает позицию за последним элементом при обратном переборе (то есть позицию перед первым элементом контейнера).

Результат выполнения программы выглядит так:


Рис.1. Результат работы приложения

   
На следующем шаге мы рассмотрим итераторы и обратные итераторы.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий