filter_iterator_ref.rst
来自「Boost provides free peer-reviewed portab」· RST 代码 · 共 178 行
RST
178 行
.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt.. 2004. Use, modification and distribution is subject to 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) :: template <class Predicate, class Iterator> class filter_iterator { public: typedef iterator_traits<Iterator>::value_type value_type; typedef iterator_traits<Iterator>::reference reference; typedef iterator_traits<Iterator>::pointer pointer; typedef iterator_traits<Iterator>::difference_type difference_type; typedef /* see below */ iterator_category; filter_iterator(); filter_iterator(Predicate f, Iterator x, Iterator end = Iterator()); filter_iterator(Iterator x, Iterator end = Iterator()); template<class OtherIterator> filter_iterator( filter_iterator<Predicate, OtherIterator> const& t , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition ); Predicate predicate() const; Iterator end() const; Iterator const& base() const; reference operator*() const; filter_iterator& operator++(); private: Predicate m_pred; // exposition only Iterator m_iter; // exposition only Iterator m_end; // exposition only };If ``Iterator`` models Readable Lvalue Iterator and Bidirectional TraversalIterator then ``iterator_category`` is convertible to``std::bidirectional_iterator_tag``. Otherwise, if ``Iterator`` models Readable Lvalue Iterator and Forward TraversalIterator then ``iterator_category`` is convertible to``std::forward_iterator_tag``. Otherwise ``iterator_category`` isconvertible to ``std::input_iterator_tag``.``filter_iterator`` requirements................................The ``Iterator`` argument shall meet the requirements of ReadableIterator and Single Pass Iterator or it shall meet the requirements ofInput Iterator.The ``Predicate`` argument must be Assignable, Copy Constructible, andthe expression ``p(x)`` must be valid where ``p`` is an object of type``Predicate``, ``x`` is an object of type``iterator_traits<Iterator>::value_type``, and where the type of``p(x)`` must be convertible to ``bool``.``filter_iterator`` models..........................The concepts that ``filter_iterator`` models are dependent on whichconcepts the ``Iterator`` argument models, as specified in thefollowing tables.+---------------------------------+------------------------------------------+|If ``Iterator`` models |then ``filter_iterator`` models |+=================================+==========================================+|Single Pass Iterator |Single Pass Iterator |+---------------------------------+------------------------------------------+|Forward Traversal Iterator |Forward Traversal Iterator |+---------------------------------+------------------------------------------+|Bidirectional Traversal Iterator |Bidirectional Traversal Iterator |+---------------------------------+------------------------------------------++--------------------------------+----------------------------------------------+| If ``Iterator`` models | then ``filter_iterator`` models |+================================+==============================================+| Readable Iterator | Readable Iterator |+--------------------------------+----------------------------------------------+| Writable Iterator | Writable Iterator |+--------------------------------+----------------------------------------------+| Lvalue Iterator | Lvalue Iterator |+--------------------------------+----------------------------------------------++-------------------------------------------------------+---------------------------------+|If ``Iterator`` models | then ``filter_iterator`` models |+=======================================================+=================================+|Readable Iterator, Single Pass Iterator | Input Iterator |+-------------------------------------------------------+---------------------------------+|Readable Lvalue Iterator, Forward Traversal Iterator | Forward Iterator |+-------------------------------------------------------+---------------------------------+|Writable Lvalue Iterator, Forward Traversal Iterator | Mutable Forward Iterator |+-------------------------------------------------------+---------------------------------+|Writable Lvalue Iterator, Bidirectional Iterator | Mutable Bidirectional Iterator |+-------------------------------------------------------+---------------------------------+``filter_iterator<P1, X>`` is interoperable with ``filter_iterator<P2, Y>`` if and only if ``X`` is interoperable with ``Y``.``filter_iterator`` operations..............................In addition to those operations required by the concepts that``filter_iterator`` models, ``filter_iterator`` provides the followingoperations.``filter_iterator();``:Requires: ``Predicate`` and ``Iterator`` must be Default Constructible.:Effects: Constructs a ``filter_iterator`` whose``m_pred``, ``m_iter``, and ``m_end`` members are a default constructed.``filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());``:Effects: Constructs a ``filter_iterator`` where ``m_iter`` is either the first position in the range ``[x,end)`` such that ``f(*m_iter) == true`` or else``m_iter == end``. The member ``m_pred`` is constructed from ``f`` and ``m_end`` from ``end``.``filter_iterator(Iterator x, Iterator end = Iterator());``:Requires: ``Predicate`` must be Default Constructible and ``Predicate`` is a class type (not a function pointer).:Effects: Constructs a ``filter_iterator`` where ``m_iter`` is either the first position in the range ``[x,end)`` such that ``m_pred(*m_iter) == true`` or else``m_iter == end``. The member ``m_pred`` is default constructed.:: template <class OtherIterator> filter_iterator( filter_iterator<Predicate, OtherIterator> const& t , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition );``:Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``.:Effects: Constructs a filter iterator whose members are copied from ``t``.``Predicate predicate() const;``:Returns: ``m_pred````Iterator end() const;``:Returns: ``m_end````Iterator const& base() const;``:Returns: ``m_iterator````reference operator*() const;``:Returns: ``*m_iter````filter_iterator& operator++();``:Effects: Increments ``m_iter`` and then continues to increment ``m_iter`` until either ``m_iter == m_end`` or ``m_pred(*m_iter) == true``.:Returns: ``*this``
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?