#include <iostream>
#include <vector>
#include <list>
#include <iterator>
#include <algorithm>

template<typename It>
void output_op(It it){
	std::copy(it,it + 5,std::ostream_iterator<int>(std::cout));
}
template<typename It>
void output_adv(It it){
	//auto end = std::next(it,5)も可
	auto end = it;
	std::advance(end,5);
	
	std::copy(it,end,std::ostream_iterator<int>(std::cout));
}

int main() {
	std::vector<int> v = {1,2,3,4,5,6,7,8,9,10};
	std::list<int> l = {1,2,3,4,5,6,7,8,9,10};
	
	output_op(v.begin());
	//output_op(l.begin()); //Compile Error
	
	output_adv(v.begin());
	output_adv(l.begin());
	
	return 0;
}