이때 다음과 같이 template 클래스를 만들어서 사용하면 편리하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include < iostream > #include < vector > #include < algorithm > template < typename T > class RangeIterator { public : typedef typename T::const_iterator TConstIterator; typedef std::pair< TConstIterator, TConstIterator > ConstIterPair; static ConstIterPair GetIterPairPerPage( const T& container, const size_t pageByZerobase, const size_t pagePerCount ) { const size_t startIndex = pageByZerobase * pagePerCount; TConstIterator it_begin = (startIndex >= container.size()) ? container.end() : std::next(container.begin(), startIndex); TConstIterator it_end = (pagePerCount >= static_cast < size_t >(std::distance(it_begin, container.end()))) ? container.end() : std::next(it_begin, pagePerCount); return ConstIterPair::pair(it_begin, it_end); } static const size_t GetMaxPageByZeroBase( const T& container, const size_t pagePerCount) { return (pagePerCount < 1 || container.empty() ) ? 0 : (container.size() - 1) / pagePerCount; } }; int _tmain( int argc, _TCHAR* argv[]) { typedef std::vector< int > VecInts; VecInts vecInts; vecInts.push_back(0); vecInts.push_back(1); vecInts.push_back(2); vecInts.push_back(3); vecInts.push_back(4); vecInts.push_back(5); vecInts.push_back(6); vecInts.push_back(7); vecInts.push_back(8); vecInts.push_back(9); const size_t pagePerCount = 5; const size_t MAX_PAGE_BY_ZEROBASE = RangeIterator< VecInts >::GetMaxPageByZeroBase(vecInts, pagePerCount); auto iter_pair = RangeIterator< VecInts >::GetIterPairPerPage(vecInts, MAX_PAGE_BY_ZEROBASE, pagePerCount); std::for_each(std::begin(iter_pair), std::end(iter_pair), []( const VecInts::value_type& elem) { std::cout << elem << std::endl; }); return 0; } |
덧글을 달아 주세요