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;
  }