ADC Home > Reference Library > Reference > Darwin > Miscellaneous User Space API Reference
|
stl_iterator.h |
This is an internal header file, included by other library headers.
You should not attempt to use it directly.
This file implements reverse_iterator, back_insert_iterator,
front_insert_iterator, insert_iterator, __normal_iterator, and their
supporting functions and overloaded operators.
back_inserter |
template<typename _Container> inline back_insert_iterator<_Container> back_inserter( _Container& __x)
x
An instance of back_insert_iterator working on @p x.
This wrapper function helps in creating back_insert_iterator instances.
Typing the name of the %iterator requires knowing the precise full
type of the container, which can be tedious and impedes generic
programming. Using this function lets you take advantage of automatic
template parameter deduction, making the compiler match the correct
types for you.
front_inserter |
template<typename _Container> inline front_insert_iterator<_Container> front_inserter( _Container& __x)
x
An instance of front_insert_iterator working on @p x.
This wrapper function helps in creating front_insert_iterator instances.
Typing the name of the %iterator requires knowing the precise full
type of the container, which can be tedious and impedes generic
programming. Using this function lets you take advantage of automatic
template parameter deduction, making the compiler match the correct
types for you.
inserter |
template<typename _Container, typename _Iterator> inline insert_iterator<_Container> inserter( _Container& __x, _Iterator __i)
x
An instance of insert_iterator working on @p x.
This wrapper function helps in creating insert_iterator instances.
Typing the name of the %iterator requires knowing the precise full
type of the container, which can be tedious and impedes generic
programming. Using this function lets you take advantage of automatic
template parameter deduction, making the compiler match the correct
types for you.
operator == |
template<typename _Iterator> inline bool operator==( const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y)
x
y
A simple bool.
Reverse iterators forward many operations to their underlying base()
iterators. Others are implemented in terms of one another.
operator reverse_iterator |
template<typename _Iterator> class reverse_iterator : public iterator<typename iterator_traits<_Iterator>::iterator_category, typename iterator_traits<_Iterator>::value_type, typename iterator_traits<_Iterator>::difference_type, typename iterator_traits<_Iterator>::pointer, typename iterator_traits<_Iterator>::reference> { protected: _Iterator current; public: typedef _Iterator iterator_type; typedef typename iterator_traits<_Iterator>::difference_type difference_type; typedef typename iterator_traits<_Iterator>::reference reference; typedef typename iterator_traits<_Iterator>::pointer pointer; public: /** The default constructor default-initializes member @p current. If it is a pointer, that means it is zero-initialized. */ // _GLIBCXX_RESOLVE_LIB_DEFECTS // 235 No specification of default ctor for reverse_iterator reverse_iterator() : current() ; /** This %iterator will move in the opposite direction that @p x does. */ explicit reverse_iterator( iterator_type __x) : current( __x) ; /** The copy constructor is normal. */ reverse_iterator( const reverse_iterator& __x) : current( __x.current) ; /** A reverse_iterator across other types can be copied in the normal fashion. */ template<typename _Iter> reverse_iterator( const reverse_iterator<_Iter>& __x) : current( __x.base()) ; /** @return @c current, the %iterator used for underlying work. */ iterator_type base() const /** @return TODO @doctodo */ reference operator*() const /** @return TODO @doctodo */ pointer operator->() const return &( operator*()); } /** @return TODO @doctodo */ reverse_iterator& operator++() ;
"Bidirectional and random access iterators have corresponding reverse
%iterator adaptors that iterate through the data structure in the
opposite direction. They have the same signatures as the corresponding
iterators. The fundamental relation between a reverse %iterator and its
corresponding %iterator @c i is established by the identity:
@code
&*(reverse_iterator(i)) == &*(i - 1)
@endcode
This mapping is dictated by the fact that while there is always a
pointer past the end of an array, there might not be a valid pointer
before the beginning of an array." [24.4.1]/1,2
Reverse iterators can be tricky and surprising at first. Their
semantics make sense, however, and the trickiness is a side effect of
the requirement that the iterators must be safe.