![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Class iterator_rangeBoost , Chapter 1. Range 2.0 , Utilities
Намерение класса Если аргумент шаблона не является моделью Forward Traversal Iterator, можно использовать подмножество интерфейса. В частности, Напомним, что многие построенные по умолчанию итераторы являются singular и, следовательно, могут быть только назначены, но не сопоставлены или увеличены или что-либо еще. Однако, если вы создаете построенный по умолчанию SynopsisБазовая функциональность находится в файле заголовка
The namespace boost { template< class ForwardTraversalIterator > class iterator_range { public: // Forward Range types typedef ForwardTraversalIterator iterator; typedef ForwardTraversalIterator const_iterator; typedef iterator_difference<iterator>::type difference_type; public: // construction, assignment template< class ForwardTraversalIterator2 > iterator_range( ForwardTraversalIterator2 Begin, ForwardTraversalIterator2 End ); template< class ForwardRange > iterator_range( ForwardRange& r ); template< class ForwardRange > iterator_range( const ForwardRange& r ); template< class ForwardRange > iterator_range& operator=( ForwardRange& r ); template< class ForwardRange > iterator_range& operator=( const ForwardRange& r ); public: // Forward Range functions iterator begin() const; iterator end() const; public: // convenience operator unspecified_bool_type() const; bool equal( const iterator_range& ) const; value_type& front() const; void drop_front(); void drop_front(difference_type n); bool empty() const; iterator_range& advance_begin(difference_type n); iterator_range& advance_end(difference_type n); // for Bidirectional: value_type& back() const; void drop_back(); void drop_back(difference_type n); // for Random Access only: reference operator[]( difference_type at ) const; value_type operator()( difference_type at ) const; size_type size() const; }; // stream output template< class ForwardTraversalIterator, class T, class Traits > std::basic_ostream<T,Traits>& operator<<( std::basic_ostream<T,Traits>& Os, const iterator_range<ForwardTraversalIterator>& r ); // comparison template< class ForwardTraversalIterator, class ForwardTraversalIterator2 > bool operator==( const iterator_range<ForwardTraversalIterator>& l, const iterator_range<ForwardTraversalIterator2>& r ); template< class ForwardTraversalIterator, class ForwardRange > bool operator==( const iterator_range<ForwardTraversalIterator>& l, const ForwardRange& r ); template< class ForwardTraversalIterator, class ForwardRange > bool operator==( const ForwardRange& l, const iterator_range<ForwardTraversalIterator>& r ); template< class ForwardTraversalIterator, class ForwardTraversalIterator2 > bool operator!=( const iterator_range<ForwardTraversalIterator>& l, const iterator_range<ForwardTraversalIterator2>& r ); template< class ForwardTraversalIterator, class ForwardRange > bool operator!=( const iterator_range<ForwardTraversalIterator>& l, const ForwardRange& r ); template< class ForwardTraversalIterator, class ForwardRange > bool operator!=( const ForwardRange& l, const iterator_range<ForwardTraversalIterator>& r ); template< class ForwardTraversalIterator, class ForwardTraversalIterator2 > bool operator<( const iterator_range<ForwardTraversalIterator>& l, const iterator_range<ForwardTraversalIterator2>& r ); template< class ForwardTraversalIterator, class ForwardRange > bool operator<( const iterator_range<ForwardTraversalIterator>& l, const ForwardRange& r ); template< class ForwardTraversalIterator, class ForwardRange > bool operator<( const ForwardRange& l, const iterator_range<ForwardTraversalIterator>& r ); // external construction template< class ForwardTraversalIterator > iterator_range< ForwardTraversalIterator > make_iterator_range( ForwardTraversalIterator Begin, ForwardTraversalIterator End ); // Make an iterator_range [first, boost::next(first, n) ) template< class ForwardTraversalIterator, class Integer > iterator_range< ForwardTraversalIterator > make_iterator_range_n( ForwardTraversalIterator first, Integer n ); template< class ForwardRange > iterator_range< typename range_iterator<ForwardRange>::type > make_iterator_range( ForwardRange& r ); template< class ForwardRange > iterator_range< typename range_iterator<const ForwardRange>::type > make_iterator_range( const ForwardRange& r ); template< class Range > iterator_range< typename range_iterator<Range>::type > make_iterator_range( Range& r, typename range_difference<Range>::type advance_begin, typename range_difference<Range>::type advance_end ); template< class Range > iterator_range< typename range_iterator<const Range>::type > make_iterator_range( const Range& r, typename range_difference<const Range>::type advance_begin, typename range_difference<const Range>::type advance_end ); // convenience template< class Sequence, class ForwardRange > Sequence copy_range( const ForwardRange& r ); } // namespace 'boost' Если экземпляр Стоит отметить, что шаблонные конструкторы и операторы присваивания позволяют конвертировать из Details member functions
Details functions
iterator_range make_iterator_range( Range& r, typename range_difference<Range>::type advance_begin, typename range_difference<Range>::type advance_end ); iterator new_begin = begin( r ), iterator new_end = end( r ); std::advance( new_begin, advance_begin ); std::advance( new_end, advance_end ); return make_iterator_range( new_begin, new_end );
Статья Class iterator_range раздела Chapter 1. Range 2.0 Utilities может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |