Listing 3
#include <algorithm> #include <array> #include <functional> #include <iostream> #include <iterator> using std::tr1::array; using std::cout; using std::ostream_iterator; using std::binary_negate; using std::not_equal_to; using std::unique; 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() { // use predicate equal_to to eliminate duplicates in a range apply(binary_negate<not_equal_to<int> >(not_equal_to<int>()) ); return 0; }