transform_iterator_ref.rst

来自「Boost provides free peer-reviewed portab」· RST 代码 · 共 176 行

RST
176
字号
.. Copyright David Abrahams 2006. Distributed under the Boost.. Software License, Version 1.0. (See accompanying.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).. Version 1.3 of this document was accepted for TR1::  template <class UnaryFunction,            class Iterator,             class Reference = use_default,             class Value = use_default>  class transform_iterator  {  public:    typedef /* see below */ value_type;    typedef /* see below */ reference;    typedef /* see below */ pointer;    typedef iterator_traits<Iterator>::difference_type difference_type;    typedef /* see below */ iterator_category;    transform_iterator();    transform_iterator(Iterator const& x, UnaryFunction f);    template<class F2, class I2, class R2, class V2>    transform_iterator(          transform_iterator<F2, I2, R2, V2> const& t        , typename enable_if_convertible<I2, Iterator>::type* = 0      // exposition only        , typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only    );    UnaryFunction functor() const;    Iterator const& base() const;    reference operator*() const;    transform_iterator& operator++();    transform_iterator& operator--();  private:    Iterator m_iterator; // exposition only    UnaryFunction m_f;   // exposition only  };If ``Reference`` is ``use_default`` then the ``reference`` member of``transform_iterator`` is``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type``.Otherwise, ``reference`` is ``Reference``.If ``Value`` is ``use_default`` then the ``value_type`` member is``remove_cv<remove_reference<reference> >::type``.  Otherwise,``value_type`` is ``Value``.If ``Iterator`` models Readable Lvalue Iterator and if ``Iterator``models Random Access Traversal Iterator, then ``iterator_category`` isconvertible to ``random_access_iterator_tag``. Otherwise, if``Iterator`` models Bidirectional Traversal Iterator, then``iterator_category`` is convertible to``bidirectional_iterator_tag``.  Otherwise ``iterator_category`` isconvertible to ``forward_iterator_tag``. If ``Iterator`` does notmodel Readable Lvalue Iterator then ``iterator_category`` isconvertible to ``input_iterator_tag``.``transform_iterator`` requirements...................................The type ``UnaryFunction`` must be Assignable, Copy Constructible, andthe expression ``f(*i)`` must be valid where ``f`` is an object oftype ``UnaryFunction``, ``i`` is an object of type ``Iterator``, andwhere the type of ``f(*i)`` must be``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type``.The argument ``Iterator`` shall model Readable Iterator.  ``transform_iterator`` models.............................The resulting ``transform_iterator`` models the most refined of thefollowing that is also modeled by ``Iterator``.  * Writable Lvalue Iterator if ``transform_iterator::reference`` is a non-const reference.   * Readable Lvalue Iterator if ``transform_iterator::reference`` is a const reference.  * Readable Iterator otherwise. The ``transform_iterator`` models the most refined standard traversalconcept that is modeled by the ``Iterator`` argument.If ``transform_iterator`` is a model of Readable Lvalue Iterator thenit models the following original iterator concepts depending on whatthe ``Iterator`` argument models.+-----------------------------------+---------------------------------------+| If ``Iterator`` models            | then ``transform_iterator`` models    |+===================================+=======================================+| Single Pass Iterator              | Input Iterator                        |+-----------------------------------+---------------------------------------+| Forward Traversal Iterator        | Forward Iterator                      |+-----------------------------------+---------------------------------------+| Bidirectional Traversal Iterator  | Bidirectional Iterator                |+-----------------------------------+---------------------------------------+| Random Access Traversal Iterator  | Random Access Iterator                |+-----------------------------------+---------------------------------------+If ``transform_iterator`` models Writable Lvalue Iterator then it is amutable iterator (as defined in the old iterator requirements).``transform_iterator<F1, X, R1, V1>`` is interoperable with``transform_iterator<F2, Y, R2, V2>`` if and only if ``X`` isinteroperable with ``Y``.``transform_iterator`` operations.................................In addition to the operations required by the concepts modeled by``transform_iterator``, ``transform_iterator`` provides the followingoperations.``transform_iterator();``:Returns: An instance of ``transform_iterator`` with ``m_f``  and ``m_iterator`` default constructed.``transform_iterator(Iterator const& x, UnaryFunction f);``:Returns: An instance of ``transform_iterator`` with ``m_f``  initialized to ``f`` and ``m_iterator`` initialized to ``x``.::    template<class F2, class I2, class R2, class V2>    transform_iterator(          transform_iterator<F2, I2, R2, V2> const& t        , typename enable_if_convertible<I2, Iterator>::type* = 0      // exposition only        , typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only    );:Returns: An instance of ``transform_iterator`` with ``m_f``  initialized to ``t.functor()`` and ``m_iterator`` initialized to  ``t.base()``.:Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``.``UnaryFunction functor() const;``:Returns: ``m_f````Iterator const& base() const;``:Returns: ``m_iterator````reference operator*() const;``:Returns: ``m_f(*m_iterator)````transform_iterator& operator++();``:Effects: ``++m_iterator``:Returns: ``*this````transform_iterator& operator--();``:Effects: ``--m_iterator``:Returns: ``*this``

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?