이때 다음과 같이 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;
}
덧글을 달아 주세요