Here's something with a template constructor using an argument like an iterator:
Code:
#include <iostream>
#include <vector>
#include <string>
class PrintFirstN
{
public:
template<typename iterator_type>
PrintFirstN(unsigned N, iterator_type it)
{
for(unsigned int i = 0; i < N; ++i, it++)
std::cout << *it << '\n';
}
};
int main()
{
const char* cstrs[] = {"ah","ajd","223","dkjhf","1234",
"head","foot","&^%&*^","!!haha","?"};
int nums[] = {1,2,3,4,5,6,7,8,9,10};
std::vector<int> vnums(nums,nums+10);
std::vector<std::string> cppstrs(cstrs,cstrs+10);
PrintFirstN foo_a(10,cstrs);
PrintFirstN foo_b(10,nums);
PrintFirstN foo_c(10,vnums.begin());
PrintFirstN foo_d(10,cppstrs.begin());
return 0;
}