이때 다음과 같이 template 클래스를 만들어서 사용하면 편리하다.
#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; }
덧글을 달아 주세요