| |
|
Category: iterators | | Component type: type |
Description
Bidirectional_iterator
is an iterator base class: it is intended that an iterator that is a model of BidirectionalIterator, and whose value type and distance type are T
and Distance
, may be defined by inheriting from bidirectional_iterator<T, Distance>
[1]. Bidirectional_iterator
is entirely empty: it has no member functions, member variables, or nested types. It exists solely to simplify the definition of the functions iterator_category
, distance_type
, and value_type
.
Example
class my_bidirectional_iterator : public bidirectional_iterator<double>
{
...
};
This declares my_bidirectional_iterator
to be a BidirectionalIterator whose value type is double
and whose distance type is ptrdiff_t
. If Iter
is an object of class my_bidirectional_iterator
, then iterator_category(Iter)
will return bidirectional_iterator_tag()
, value_type(Iter)
will return (double*) 0
, and distance_type(Iter)
will return (ptrdiff_t*) 0
.
Definition
Defined in the standard header iterator, and in the nonstandard backward-compatibility header iterator.h. This class is no longer part of the C++ standard, although it was present in early drafts of the standard. It is retained in this implementation for backward compatibility.
Template parameters
Parameter | Description | Default |
T | The iterator's value type | |
Distance | The iterator's distance type | ptrdiff_t |
Model of
Assignable
Public base classes
None
Type requirements
The distance type must be a signed integral type.
Public base classes
None.
Members
None.
New Members
None.
Notes
[1] It is not required that a BidirectionalIterator inherit from the base bidirectional_iterator
. It is, however, required that the functions iterator_category
, distance_type
, and value_type
be defined for every BidirectionalIterator. (Or, if you are using the iterator_traits
mechanism, that iterator_traits
is properly specialized for every BidirectionalIterator.) Since those functions are defined for the base bidirectional_iterator
, the easiest way to ensure that are defined for a new type is to derive that class from bidirectional_iterator
and rely on the derived-to-base standard conversion of function arguments.
See also
The iterator_tags overview, iterator_traits
, iterator_category
, value_type
, distance_type
, input_iterator
, output_iterator
, forward_iterator
, random_access_iterator