The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

reverse_iterator (3)
  • >> reverse_iterator (3) ( Solaris man: Библиотечные вызовы )
  • 
                           Standard C++ Library
                 Copyright 1998, Rogue Wave Software, Inc.
    
    
    NAME
         __reverse_bi_iterator, reverse_iterator
    
          -  An  iterator  that  traverses  a  collection  backwards.
         __reverse_bi_iterator  is  included for those compilers that
         do not support partial specialization. The  template  signa-
         ture     for     reverse_iterator     matches     that    of
         __reverse_bi_iterator when  partial  specialization  is  not
         available  (in  other  words, it has six template parameters
         rather than one).
    
    
    
    SYNOPSIS
         #include <iterator>
         template <class Iterator,
                  class Category,
                  class T,
                  class Reference = T&,
                  class Pointer = T*
                  class Distance = ptrdiff_t>
         class __reverse_bi_iterator ;
    
         template <class Iterator>
         class reverse_iterator ;
    
    
    
    DESCRIPTION
         The  iterators  reverse_iterator   and___reverse_bi_iterator
         correspond        to        random_access_iterator       and
         bidirectional_iterator, except that  they  traverse  collec-
         tions  in  the opposite direction. The fundamental relation-
         ship between a reverse iterator and its corresponding itera-
         tor i is established by the identity:
    
         &*(reverse_iterator(i)) == &*(i-1);
    
         This mapping is dictated by the fact that,  while  there  is
         always  a  pointer  past the end of a container, there might
         not be a valid pointer before its beginning.
    
         The following are true for __reverse_bi_iterators:
    
    
    
         o    These iterators may be instantiated  with  the  default
              constructor  or  by  a single argument constructor that
              initializes  the  new  __reverse_bi_iterator   with   a
              bidirectional_iterator.
    
         o    operator* returns a reference to the current value.
    
         o    operator++ advances the iterator to the  previous  item
              (--current) and returns a reference to *this.
    
         o    operator++(int) advances the iterator to  the  previous
              item (--current) and returns the old value of *this.
    
         o    operator-- advances the iterator to the following  item
              (++current) and returns a reference to *this.
    
         o    operator--(int) advances the iterator to the  following
              item (++current) and returns the old value of *this.
    
         o    operator== is a non-member operator that  returns  true
              if the iterators x and y point to the same item.
    
    
         The following are true for reverse_iterators:
    
    
    
         o    These iterators may be instantiated  with  the  default
              constructor  or  by  a single argument constructor that
              initializes   the   new   reverse_iterator    with    a
              random_access_iterator.
    
         o    operator* returns a reference to the current value.
    
         o    operator++ advances the iterator to the  previous  item
              (--current) and returns a reference to *this.
    
         o    operator++(int) advances the iterator to  the  previous
              item (--current) and returns the old value of *this.
    
         o    operator-- advances the iterator to the following  item
              (++current) and returns a reference to *this.
    
         o    operator--(int) advances the iterator to the  following
              item (++current) and returns the old value of *this.
    
         o    operator== is a non-member operator that  returns  true
              if the iterators x and y point to the same item.
    
         o    operator!=  is  a  non-member  operator  that   returns
              !(x==y).
    
         o    operator< is a non-member operator that returns true if
              the iterator x precedes the iterator y.
    
         o    operator> is a non-member operator that returns y < x.
    
         o    operator<= is a non-member operator that returns !(y  <
              x).
    
         o    operator>= is a non-member operator that returns !(x  <
              y).
    
         o    The remaining operators (<, +, -, +=, -=) are redefined
              to    behave    exactly    as    they    would   in   a
              random_access_iterator, except with the sense of direc-
              tion reversed.
    
    
    
    COMPLEXITY
         All iterator operations are required to take at  most  amor-
         tized constant time.
    
    
    
    INTERFACE
         template <class Iterator,
                  class Category,
                  class T,
                  class Reference = T&,
                  class Pointer = T*,
                  class Distance = ptrdiff_t>
         class __reverse_bi_iterator
            : public iterator<bidirectional_iterator_tag, Category T,
                             Distance> {
            typedef
              __reverse_bi_iterator<Iterator,
              Category T, Reference, Pointer, Distance> self;
            friend bool operator== (const self&, const self&);
          public:
            __reverse_bi_iterator ();
            explicit __reverse_bi_iterator
               (Iterator);
            Iterator base ();
            Reference operator* ();
            self& operator++ ();
            self operator++ (int);
            self& operator-- ();
            self operator-- (int);
           };
    
         // Non-member Operators
    
          template <class Iterator, class Category
                    class T, class Reference,
                    class Pointer, class Distance>
          bool operator== (
            const __reverse_bi_iterator
              <Iterator,Category T,Reference,Pointer,Distance>&,
             const __reverse_bi_iterator
              <Iterator,Category T,Reference,Pointer,Distance>&);
    
         template <class Iterator,
                    class T, class Reference, class Category,
                    class Pointer, class Distance>
          bool operator!= (
            const __reverse_bi_iterator
              <Iterator,Category T,Reference,Pointer,Distance>&,
             const __reverse_bi_iterator
              <Iterator,Category T,Reference,Pointer,Distance>&);
    
         template <class 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>
         {
    
            typedef reverse_iterator<Iterator> self;
    
            friend bool operator==    (const self&, const self&);
            friend bool operator<     (const self&, const self&);
            friend Distance operator- (const self&, const self&);
            friend self operator+     (Distance, const self&);
    
         public:
            reverse_iterator ();
            explicit reverse_iterator (Iterator);
            Iterator base ();
            Reference operator* ();
            self& operator++ ();
            self operator++ (int);
            self& operator-- ();
            self operator-- (int);
    
            self  operator+ (Distance) const;
            self& operator+= (Distance);
            self operator- (Distance) const;
            self& operator-= (Distance);
            Reference operator[] (Distance);
    
         };
    
         // Non-member Operators
    
            template <class Iterator> bool operator==
                const reverse_iterator<Iterator>&,
                const reverse_iterator<Iterator>&);
    
         template <class Iterator> bool operator!=
                const reverse_iterator<Iterator>&,
                const reverse_iterator<Iterator>&);
    
             template <class Iterator> bool operator< (
                 const reverse_iterator<Iterator>&,
                 const reverse_iterator<Iterator>&);
    
         template <class Iterator> bool operator>
                 const reverse_iterator<Iterator>&,
                 const reverse_iterator<Iterator>&);
    
         template <class Iterator> bool operator<=
                 const reverse_iterator<Iterator>&,
                 const reverse_iterator<Iterator>&);
    
         template <class Iterator> bool operator>=
                 const reverse_iterator<Iterator>&,
                 const reverse_iterator<Iterator>&);
    
             template <class Iterator> Distance operator-
                 const reverse_iterator<Iterator>&,
                 const reverse_iterator<Iterator>&);
    
             template <class Iterator>
              reverse_iterator<Iterator> operator+ Distance,
                 const reverse_iterator<Iterator>&);
    
    
    
    EXAMPLE
         //
         // rev_itr.cpp
         //
          #include <iterator>
          #include <vector>
          #include <iostream>
         using namespace std;
    
         int main()
          {
            //Initialize a vector using an array
           int arr[4] = {3,4,7,8};
           vector<int> v(arr,arr+4);
            //Output the original vector
           cout << "Traversing vector with iterator: " << endl
                 << "     ";
           for(vector<int>::iterator i = v.begin(); i != v.end();
               i++)
             cout << *i << " ";
            //Declare the reverse_iterator
           vector<int>::reverse_iterator rev(v.end());
           vector<int>::reverse_iterator rev_end(v.begin());
            //Output the vector backwards
           cout << endl << endl;
           cout << "Same vector, same loop, reverse_iterator: "
                  << endl << "     ";
           for(; rev != rev_end; rev++)
             cout << *rev << " ";
           return 0;
          }
    
         Program Output
    
    
    
         Traversing vector with iterator:
             3 4 7 8
         Same vector, same loop, reverse_iterator:
             8 7 4 3
    
    
    
    WARNINGS
         If your compiler does not support default  template  parame-
         ters,  then you always need to supply the Allocator template
         argument. For instance, you need to write:
    
         vector<int, allocator<int> >
    
         instead of:
    
         vector<int>
    
         If your compiler does not support namespaces,  then  you  do
         not need the using declaration for std.
    
    
    
    SEE ALSO
         Iterators
    
    
    
    


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру