Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Concept BidirectionalIterator

BidirectionalIterator

Description

A bidirectional iterator is an iterator that can read through a sequence of values. It can move in either direction through the sequence, and can be either mutable (data pointed to by it can be changed) or not mutable.

An iterator represents a position in a sequence. Therefore, the iterator can point into the sequence (returning a value when dereferenced and being incrementable), or be off-the-end (and not dereferenceable or incrementable).

Refinement of

Associated types

  • value_type

    std::iterator_traits<Iter>::value_type

    The value type of the iterator

  • category

    std::iterator_traits<Iter>::iterator_category

    The category of the iterator

Notation

Iter
A type playing the role of iterator-type in the BidirectionalIterator concept.
i, j
Objects of type Iter
x
Object of type value_type

Type expressions

Category tag

category must be derived from std::bidirectional_iterator_tag.

Valid expressions

Name Expression Type Precondition Semantics Postcondition

Predecrement

--i

Iter &

i is incrementable (not off-the-end) and some dereferenceable iterator j exists such that i == ++j

   

Postdecrement

i--

Iter

Same as for predecrement

Equivalent to {Iter j = i; --i; return j;}

i is dereferenceable or off-the-end

Complexity

All iterator operations must take amortized constant time.

Invariants

Predecrement must return object

&i = &(--i)

Unique path through sequence

i == j implies --i == --j

Increment and decrement are inverses

++i; --i; and --i; ++i; must end up with the value of i unmodified, if i both of the operations in the pair are valid.

Models

  • T *
  • std::list<T>::iterator

See also


PrevUpHomeNext