Listing 2
#include <algorithm>
#include <array>
#include <functional>
#include <iostream>
#include <iterator>
using std::tr1::array;
using std::cout; using std::ostream_iterator;
using std::negate; using std::transform;
typedef array<double, 7> arr;
typedef arr::iterator arr_it;
int main()
{ // use template negate to negate values in a range
arr data = { 1.0, -1.1, -2.7, 3.1, -3.1, 3, 5.0 };
copy(data.begin(), data.end(), ostream_iterator<double>(cout, " ") );
cout << '\n';
transform(data.begin(), data.end(), data.begin(), negate<double>() );
copy(data.begin(), data.end(), ostream_iterator<double>(cout, " ") );
cout << '\n';
return 0;
}