В шапке есть следующее дополнение:<iterator>
namespace std { template<class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&> struct iterator { using iterator_category = Category; using value_type = T; using difference_type = Distance; using pointer = Pointer; using reference = Reference; }; }
iterator Шаблон может быть использован в качестве базового класса , чтобы облегчить определение необходимых типов для новых итераторов.
[ Note: Если новый тип итератора является шаблоном класса, то эти псевдонимы не будут видны из определения шаблона класса итератора, а будут видны только вызывающим объектам этого класса. ] — end note
[ Example: Если программа на C ++ хочет определить двунаправленный итератор для некоторой структуры данных, содержащей double и такой, чтобы она работала на большой модели памяти реализации, она может сделать это с помощью:
class MyIterator :
public iterator<bidirectional_iterator_tag, double, long, T*, T&> {
// code implementing ++, etc.
};
— end example ]