// MT2Q1.cpp - love those functors #include #include #include #include template class functor { public: functor(const std::string& prefix) : _suffix(prefix) {} void operator()(T t) { std::cout << t << _suffix; } private: std::string _suffix; }; template // need to wrap array in cont. with iterators void display1(typename T::iterator ibegin, typename T::iterator iend, functor& f) { std::cout << "\n "; for(T::iterator iter = ibegin; iter != iend; ++iter) f(*iter); std::cout << "\n"; } template // doesn't quite satisfy requirements, but close void display2(int* ibegin, int* iend, functor& f) { std::cout << "\n "; for(int* iter = ibegin; iter != iend; ++iter) f(*iter); std::cout << "\n"; } template // fully satisfies requirements and accepts array void display3(Iter ibegin, Iter iend, functor& f) { std::cout << "\n "; for(Iter it = ibegin; it != iend; ++it) f(*it); std::cout << "\n"; } int main() { int target[] = { 1, 2, 1, -1, -2 }; std::vector myVec(&target[0], &target[5]); functor myFunctor(", "); display1< std::vector >(myVec.begin(), myVec.end(), myFunctor); display2(&target[0], &target[5], myFunctor); display3(&target[0],&target[5], myFunctor); display3::iterator, int>(myVec.begin(), myVec.end(), myFunctor); std::cout << std::endl; }