stlab.adobe.com Adobe Systems Incorporated
BidirectionalIterator
iterators.gif
concept.gif
Category: iterators Component type: concept

Description

A Bidirectional Iterator is an iterator that can be both incremented and decremented. The requirement that a Bidirectional Iterator can be decremented is the only thing that distinguishes Bidirectional Iterators from ForwardIterator.

Refinement of

ForwardIterator

Associated types

The same as for ForwardIterator.

Notation

X A type that is a model of Bidirectional Iterator
T The value type of X
i, j Object of type X
t Object of type T

Definitions

Valid expressions

In addition to the expressions defined in ForwardIterator, the following expressions must be valid.

Name Expression Type requirements Return type
Predecrement –i   X&
Postdecrement i–   X

Expression Semantics

Semantics of an expression is defined only where it is not defined in ForwardIterator.

Name Expression Precondition Semantics Postcondition
Predecrement –i i is dereferenceable or past-the-end. There exists a dereferenceable iterator j such that i == ++j. i is modified to point to the previous element. i is dereferenceable. &i = &–i. If i == j, then –i == –j. If j is dereferenceable and i == ++j, then –i == j.
Postdecrement i– i is dereferenceable or past-the-end. There exists a dereferenceable iterator j such that i == ++j. Equivalent to
{
X tmp = i;
--i;
return tmp;
}
 

Complexity guarantees

The complexity of operations on bidirectional iterators is guaranteed to be amortized constant time.

Invariants

Symmetry of increment and decrement If i is dereferenceable, then ++i; –i; is a null operation. Similarly, –i; ++i; is a null operation.

Models

  • T*
  • List<T>::iterator

Notes

See also

InputIterator, OutputIterator, ForwardIterator, RandomAccessIterator, Iterators

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google