422
Самоучитель C++ (продолжение)
Итератор
Описание
Однонаправленный (forward)
Используется для считывания и записи значений. Может проходить контейнер только в одном направлении
Ввода (input)
Используется только для считывания значений. Может проходить контейнер только в одном направлении
Вывода (output)
Используется только для записи значений. Может проходить контейнер только в одном направлении
(Не запутайтесь. По аналогии с потоковым вводом/выводом под вводом понимается ввод информации из контейнера, т. е. считывание, а под выводом — вывод информации в контейнер, т. е. запись, — примеч. пер.) Как правило, итератор с большими возможностями доступа к содержимому контейнера может использоваться вместо итератора с меньшими возможностями. Например, однонаправленным итератором можно заменить итератор ввода. С итераторами можно работать точно так же, как с указателями. Над ними можно выполнять операции инкремента и декремента. К ним можно применить оператор *. Типом итераторов объявляется тип iterator, который определен в различных контейнерах. В библиотеке стандартных шаблонов также поддерживаются обратные итераторы (reverse iterators). Обратными итераторами могут быть либо двунаправленные итераторы, либо итераторы произвольного доступа, но проходящие последовательность в обратном направлении. То есть, если обратный итератор указывает на последний элемент последовательности, то инкремент этого итератора приведет к тому, что он будет указывать на элемент перед последним. При упоминании различных типов итераторов в описаниях шаблонов, в данной книге будут использоваться следующие термины: Термин
Тип итератора
Randlter Bilter Forlter Inlter Outlter
Произвольного доступа (random access) Двунаправленный (bidirectional) Однонаправленный (forward) Ввода (input) Вывода (output)
Вдобавок к контейнерам, алгоритмам и итераторам, в библиотеке стандартных шаблонов поддерживается еще несколько стандартных компонентов. Главными среди них являются распределители памяти, предикаты и функции сравнения.