반응형
boost iterator_range
class iterator_range
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; difference_type size() const; bool empty() const; public: // convenience operator unspecified_bool_type() const; bool equal( const iterator_range& ) const; reference front() const; reference back() const; iterator_range& advance_begin( difference_type n ); iterator_range& advance_end( difference_type n ); // for Random Access Range only: reference operator[]( difference_type at ) const; value_type operator()( difference_type at ) 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 ); 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<Range>::type advance_begin, typename range_difference<Range>::type advance_end ); // convenience template< class Sequence, class ForwardRange > Sequence copy_range( const ForwardRange& r ); } // namespace 'boost'
1.소스
#include <boost/range/iterator_range.hpp> #include <boost/range/algorithm.hpp> #include <boost/range/iterator.hpp> #include <typeinfo> #include <iostream> #include <ostream> using namespace boost; using namespace std; struct print { template<typename T> void operator()( const T &t) const { cout << t << " "; } }; int main( int argc , char ** argv ) { typedef int Arrary[20]; cout << typeid( range_iterator<Arrary>::type ).name() << endl; Arrary arr = { 11, 22, 33, 44, 55, 66, 77, 88 }; boost::for_each( make_iterator_range( arr, arr + 5 ) , print() ); cout << endl; return 0; }
결과
hacker@ubuntu:~/cpp$ hacker@ubuntu:~/cpp$ hacker@ubuntu:~/cpp$ hacker@ubuntu:~/cpp$ c++ -I /home/hacker/boost_1_61_0 -o iterator_range1 iterator_range1.cpp hacker@ubuntu:~/cpp$ ./iterator_range1 Pi 11 22 33 44 55 hacker@ubuntu:~/cpp$
반응형
'C++ > 0x02-boost' 카테고리의 다른 글
boost 설치 (0) | 2018.03.06 |
---|---|
boost to_upper_copy (0) | 2016.08.01 |
boost c++ 라이브러리 사용하기 ][ find iterator (0) | 2016.08.01 |
boost replace (0) | 2016.08.01 |
boost find (0) | 2016.08.01 |