The OpenNET Project / Index page

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

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

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

Iterators (3)
  • >> Iterators (3) ( Solaris man: Библиотечные вызовы )
  • 
                           Standard C++ Library
                 Copyright 1998, Rogue Wave Software, Inc.
    
    
    NAME
         Iterators
    
          - Pointer generalizations for traversal and modification of
         collections.
    
    
    
    DESCRIPTION
         Iterators are a generalization of pointers that allow a  C++
         program  to  uniformly  interact  with different data struc-
         tures. The illustration below  displays  the  five  iterator
         categories  defined by the standard library, and shows their
         hierarchical relationship. Because standard library iterator
         categories  are hierarchical, each category includes all the
         requirements of the categories above it.
    
         Because iterators are  used  to  traverse  and  access  con-
         tainers,  the nature of the container determines the type of
         iterator it  generates.  Also,  because  algorithms  require
         specific  iterator types as arguments, it is iterators that,
         for the most part, determine which  standard  library  algo-
         rithms can be used with which standard library containers.
    
         To conform to the C++ standard, all container  and  sequence
         classes must include their own iterator types. Each iterator
         may be a class defined within the container or may be a sim-
         ple pointer, whichever is appropriate.
    
         Containers and sequences must also include  const  iterators
         that  point  to  the beginning and end of their collections.
         These may be accessed using the class members,  begin()  and
         end().
    
         Because the semantics of iterators are a  generalization  of
         the  semantics of C++ pointers, every template function that
         takes iterators also works using C++ pointers to  contiguous
         memory sequences. For example, both of the following uses of
         the generic algorithm count are valid:
    
    
         list<int> 1;
         count(1.begin(), 1.end());
         int buf[4]={1,2,3,4};
         count(buf, buf+4);
    
         Iterators may be constant or mutable depending upon  whether
         the  result  of the operator* behaves as a reference or as a
         reference to a constant. Constant iterators  cannot  satisfy
         the requirements of an output_iterator.
    
         Every iterator type guarantees that  there  is  an  iterator
         value  that  points past the last element of a corresponding
         container. This value is called the past-the-end  value.  No
         guarantee is made that this value is dereferenceable.
    
         Every function included in an iterator  is  required  to  be
         realized in amortized constant time.
    
    
    
    KEY TO ITERATOR REQUIREMENTS
         The following key  pertains  to  the  iterator  requirements
         listed below:
    
         a and b   values of type X
    
    
    
         n   value representing a distance between two iterators
    
    
    
         u, Distance, tmp and m   identifiers
    
    
    
         r   value of type X&
    
    
    
         t   value of type T
    
    
    
    REQUIREMENTS FOR INPUT ITERATORS
         The following expressions must be valid for input iterators:
    
         X u(a)   copy constructor, u == a
    
    
    
         X u = a   assignment, u == a
    
    
         a == b, a != b   return value convertible to bool
    
    
    
         *a   a == b implies *a == *b
    
    
    
         a->m   equivalent to (*a).m
    
    
    
         ++r   returns X&
    
    
    
         r++   return value convertible to const X&
    
    
    
         *r++   returns type T
    
    
    
         For input iterators, a == b does not imply that ++a == ++b.
    
         Algorithms using input iterators should be single pass algo-
         rithms.  They  should  not  pass  through  the same iterator
         twice.
    
         The value of type T does not have to be an lvalue.
    
    
    
    REQUIREMENTS FOR OUTPUT ITERATORS
         The following expressions must be valid  for  output  itera-
         tors:
    
         X(a)   copy constructor, a == X(a)
    
    
    
         X u(a)   copy constructor, u == a
    
    
    
         X u = a   assignment, u == a
    
    
    
         *a = t   result is not used
    
    
    
         ++r   returns X&
    
    
    
         r++   return value convertible to const X&
    
    
    
         *r++ = t   result is not used
    
    
    
         The only valid use for the operator* is  on  the  left  hand
         side of the assignment statement.
    
         Algorithms using output  iterators  should  be  single  pass
         algorithms.  They  should not pass through the same iterator
         twice.
    
    
    
    REQUIREMENTS FOR FORWARD ITERATORS
         The following expressions must be valid for  forward  itera-
         tors:
    
         X u   u might have a singular value
    
    
    
         X()   X() might be singular
    
    
    
         X(a)   copy constructor, a == X(a)
    
    
    
         X u(a)   copy constructor, u == a
    
    
    
         X u = a   assignment, u == a
    
    
    
         a == b, a != b   return value convertible to bool
    
         *a   return value convertible to T&
    
    
    
         a->m   equivalent to (*a).m
    
    
    
         ++r   returns X&
    
    
    
         r++   return value convertible to const X&
    
    
    
         *r++   returns T&
    
    
    
         Forward iterators have the condition that  a  ==  b  implies
         *a== *b.
    
         There are no restrictions on the number of passes  an  algo-
         rithm may make through the structure.
    
    
    
    REQUIREMENTS FOR BIDIRECTIONAL ITERATORS
         A bidirectional iterator must meet all the requirements  for
         forward  iterators.  In  addition, the following expressions
         must be valid:
    
         --r   returns X&
    
    
    
         r--   return value convertible to const X&
    
    
    
         *r--   returns T
    
    
    
    REQUIREMENTS FOR RANDOM ACCESS ITERATORS
         A random access iterator must meet all the requirements  for
         bidirectional   iterators.   In   addition,   the  following
         expressions must be valid:
    
         r += n   Semantics of --r or ++r n times  depending  on  the
                  sign of n
    
    
    
         a + n, n + a   returns type X
    
    
    
         r -= n   returns X&, behaves as r += -n
    
    
    
         a - n   returns type X
    
    
    
         b - a   returns distance
    
    
    
         a[n]   *(a+n), return value convertible to T
    
    
    
         a < b   total ordering relation
    
    
    
         a > b   total ordering relation opposite to <
    
    
    
         a <= b   !(a > b)
    
    
    
         a >= b   !(a < b)
    
    
    
         All relational operators return a value convertible to bool.
    
    
    
    


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




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

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