На этом шаге мы перечислим методы, используемые для получения итераторов.
Для выполнения указанных действий можно воспользоваться следующими методами:
iterator string::begin () const iterator string::begin () const
Обе формы возвращают итератор произвольного доступа, установленный в начало строки (в позицию первого символа).
Для пустой строки вызов begin() эквивалентен вызову end().
iterator string::end () const_iterator string::end () const
Обе формы возвращают итератор произвольного доступа, установленный в конец строки (в позицию за последним символом).
Символ в позиции end() не определен, поэтому конструкции вида *s.end() приводят к непредсказуемым последствиям.
Для пустой строки вызов end() эквивалентен вызову begin().
reverse_iterator string::rbegin () const_reverse_iterator string::rbegin () const
Обе формы возвращают итератор произвольного доступа, установленный в позицию начала перебора строки в обратном направлении (то есть в позицию
последнего символа).
Для пустой строки вызов rbegin() эквивалентен вызову rend().
reverse_iterator string::rend () const_reverse_iterator string::rend() const
Обе формы возвращают итератор произвольного доступа, установленный в позицию конца перебора строки в обратном направлении (в позицию перед первым
символом).
Символ в позиции rend() не определен, поэтому конструкции вида *s.rend() приводят к непредсказуемым последствиям.
Для пустой строки вызов rend() эквивалентен вызову rbegin().
Обратные итераторы описаны на 219 шаге.
На следующем шаге мы рассмотрим поддержку распределителей памяти.