Listing 5
#include <algorithm> #include <array> #include <functional> #include <iostream> #include <iterator> using std::tr1::array; using std::cout; using std::ostream_iterator; using std::equal_to; using std::unique; using std::tr1::reference_wrapper; using std::tr1::ref; typedef int elt; typedef array<elt, 7> arr; typedef arr::iterator arr_it; template <class Func> void apply(Func func) { // use func to eliminate duplicates in a range arr data = { 1, 1, 2, 3, 3, 3, 5 }; arr_it end = unique(data.begin(), data.end(), func); copy(data.begin(), end, ostream_iterator<elt>(cout, " ")); cout << '\n'; } int main() { reference_wrapper<equal_to<int> > rw = ref(equal_to<int>()); apply(rw); return 0; }