As I personally would use either this or this answer (+1 for both), just for increasing your knowledge – there are boost adapters you can use. For your case – the sliced seems the most appropriate:
#include <boost/range/adaptor/sliced.hpp>
#include <vector>
#include <iostream>
int main(int argc, const char* argv[])
{
std::vector<int> input={1,2,3,4,5,6,7,8,9};
const int N = 4;
using boost::adaptors::sliced;
for (auto&& e: input | sliced(0, N))
std::cout << e << std::endl;
}
One important note: N is required by sliced
to be not greater than distance(range)
– so safer(and slower) version is as follows:
for (auto&& e: input | sliced(0, std::min(N, input.size())))
So – once again – I would use simpler, old C/C++ approach (this you wanted to avoid in your question ๐