diff --git a/reverse_iterator.htm b/reverse_iterator.htm index ec3d263..f7ea319 100644 --- a/reverse_iterator.htm +++ b/reverse_iterator.htm @@ -1,74 +1,74 @@ - + -
- - - --The reverse iterator adaptor flips the direction of an iterators -motion. Invoking operator++() moves the reverse iterator -backwards and calling operator--() moves the reverse iterator -forwards. The Boost reverse iterator adaptor is better to use than the -std::reverse_iterator class in situations where pairs of -mutable/const iterators are needed (such as in containers) because -comparisons and conversions between the mutable and const versions are -implemented correctly. - -
The reverse iterator adaptor flips the direction of a base iterator's + motion. Invoking operator++() moves the base iterator backward and + invoking operator--() moves the base iterator forward. The Boost + reverse iterator adaptor is better to use than the + std::reverse_iterator class in situations where pairs of + mutable/const iterators are needed (e.g., in containers) because + comparisons and conversions between the mutable and const versions are + implemented correctly. +
namespace boost { - template <class BidirectionalIterator, + template <class BidirectionalIterator, class Value, class Reference, class Pointer, class Category, class Distance> struct reverse_iterator_generator; - template <class BidirectionalIterator> + template <class BidirectionalIterator> typename reverse_iterator_generator<BidirectionalIterator>::type make_reverse_iterator(BidirectionalIterator base) }+
--template <class BidirectionalIterator, +template <class BidirectionalIterator, class Value, class Reference, class Pointer, class Category, class Distance> class reverse_iterator_generator { public: - typedef iterator_adaptor<...> type; // the resulting reverse iterator type + typedef iterator_adaptor<...> type; // the resulting reverse iterator type };+
+ The output is: + +#include <boost/config.hpp> #include <iostream> @@ -80,7 +80,7 @@ int main(int, char*[]) char letters[] = "hello world!"; const int N = sizeof(letters)/sizeof(char) - 1; std::cout << "original sequence of letters:\t" - << letters << std::endl; + << letters << std::endl; std::sort(letters, letters + N); @@ -93,153 +93,167 @@ int main(int, char*[]) std::cout << "letters in descending order:\t"; std::copy(reverse_letters_first, reverse_letters_last, - std::ostream_iterator<char>(std::cout)); + std::ostream_iterator<char>(std::cout)); std::cout << std::endl; // to be continued...-The output is: +
--original sequence of letters: hello world! -letters in descending order: wroolllhed! +original sequence of letters: hello world! +letters in descending order: wroolllhed!+
Parameter | Description | -
---|
Parameter - | ||
---|---|---|
BidirectionalIterator | -The iterator type being wrapped. | - -Description - |
Value | +||
BidirectionalIterator + - | The value-type of the base iterator and the resulting reverse
-iterator. -Default:std::iterator_traits<BidirectionalIterator>::value_type - |
+ The iterator type being wrapped. - |
Reference | +||
Value - | The reference type for the resulting iterator,
-and in particular, the result type of operator*()
-Typically the default for this parameter is the appropriate type. -Default: If Value is supplied, Value& is -used. Otherwise -std::iterator_traits<BidirectionalIterator>::reference is used. - |
+ The value-type of the base iterator and the resulting reverse
+ iterator. + Default:std::iterator_traits<BidirectionalIterator>::value_type + - |
Pointer | +||
Reference - | The pointer type of the resulting iterator, and in
- particular, the result type of operator->(). Typically the
- default for this parameter is the appropriate type. - Default: If Value was supplied, then Value*. - Otherwise - std::iterator_traits<BidirectionalIterator>::pointer is used. |
-The reference type of the resulting iterator, and in
+ particular, the result type of operator*(). + Default: If Value is supplied, Value& is + used. Otherwise + std::iterator_traits<BidirectionalIterator>::reference + is used. + |
Pointer - | ||
Category | -The iterator category. -Default:std::iterator_traits<BidirectionalIterator>::iterator_category - |
+ The pointer type of the resulting iterator, and in
+ particular, the result type of operator->(). + Default: If Value was supplied, then Value*, + otherwise + std::iterator_traits<BidirectionalIterator>::pointer. - |
Distance | -The corresponding pointer type for the Value. -Default:std::iterator_traits<BidirectionalIterator>::difference_type - |
+ |
Category + | The iterator_category type for the resulting iterator. + Default: + std::iterator_traits<BidirectionalIterator>::iterator_category + - |
+reverse_iterator_generator::type(const BidirectionalIterator& it)+
-
+
-
+- template <class BidirectionalIterator> - typename reverse_iterator_generator<BidirectionalIterator>::type - make_reverse_iterator(BidirectionalIterator base) +template <class BidirectionalIterator> +typename reverse_iterator_generator<BidirectionalIterator>::type +make_reverse_iterator(BidirectionalIterator base);+
+ The output is: + +// continuing from the previous example... - std::cout << "letters in ascending order:\t"; + std::cout << "letters in ascending order:\t"; std::copy(boost::make_reverse_iterator(reverse_letters_last), - boost::make_reverse_iterator(reverse_letters_first), - std::ostream_iterator-The output is: +(std::cout)); - std::cout << std::endl; + boost::make_reverse_iterator(reverse_letters_first), + std::ostream_iterator<char>(std::cout)); + std::cout << std::endl; return 0; }
+-letters in ascending order: !dehllloorw +letters in ascending order: !dehllloorw+
Revised 10 Feb 2001
-© Copyright Jeremy Siek 2000. Permission to copy, use, -modify, sell and distribute this document is granted provided this copyright -notice appears in all copies. This document is provided "as is" -without express or implied warranty, and with no claim as to its suitability for -any purpose.
+Revised + 15 + Feb 2001 + + +
© Copyright Jeremy Siek 2000. Permission to copy, use, modify, sell + and distribute this document is granted provided this copyright notice + appears in all copies. This document is provided "as is" without express or + implied warranty, and with no claim as to its suitability for any purpose. + + + + - - - - -