В библиотеке STL используются пять основных видов итераторов:
• итераторы чтения;
• итераторы записи;
• однонаправленные итераторы;
• двунаправленные итераторы;
• итераторы произвольного доступа.
Для каждого вида итераторов определен набор операций, причем двумя операциями, доступными для всех видов итераторов, являются операция инкремента ++, которая передвигает итератор p на следующий элемент последовательности (++p и p++), и операция разыменования >*, возвращающая значение текущего элемента (>*p и вариант p->m для доступа к члену m разыменованного объекта).
Операция разыменования имеет следующие особенности:
• в случае итераторов чтения операция >* не может использоваться для изменения элемента;
• в случае итераторов записи операция >* не может использоваться для получения значения элемента (выражение >*p можно использовать только в левой части присваивания);
• для прочих итераторов операция >* может использоваться как для получения значения элемента, так и для изменения этого значения.
Операции сравнения итераторов на равенство == и != реализованы для всех итераторов, кроме итераторов записи.
Для однонаправленных итераторов не определяются новые операции (по сравнению с итераторами чтения или записи).
Для двунаправленных итераторов в дополнение к операции инкремента ++ вводится операция декремента -– (также в двух видах: –p и p–).
Наконец, для итераторов произвольного доступа добавляются операция индексирования [ ], позволяющая сразу обратиться к элементу последовательности с требуемым индексом (p[i]), и операция смещения на указанное количество элементов, причем в оба направления (p + i и p – i). Имеется также операция разности двух итераторов, позволяющая определить расстояние между элементами, с которыми они связаны (p2 – p1).