text: /**************************************************************************
   *
   * pnt2fnct.cpp - Example program of pointer to function.
   *
   * $Id$
   *
   ***************************************************************************
   *
   * Licensed to the Apache Software  Foundation (ASF) under one or more
   * contributor  license agreements.  See  the NOTICE  file distributed
   * with  this  work  for  additional information  regarding  copyright
   * ownership.   The ASF  licenses this  file to  you under  the Apache
   * License, Version  2.0 (the  "License"); you may  not use  this file
   * except in  compliance with the License.   You may obtain  a copy of
   * the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the  License is distributed on an  "AS IS" BASIS,
   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
   * implied.   See  the License  for  the  specific language  governing
   * permissions and limitations under the License.
   *
   * Copyright 1994-2006 Rogue Wave Software.
   * 
   **************************************************************************/
  
  #include <algorithm>    // for copy, transform
  #include <functional>   // for ptr_fun
  #include <iostream>     // cout, endl
  #include <iterator>     // for ostream_iterator
  #include <deque>        // for deque
  #include <vector>       // for vector
  
  #include <examples.h>
  
  
  int factorial (int x)
  {
      return x > 1 ? x * factorial (x - 1) : x;
  }
  
  
  int main ()
  {
      typedef std::deque<int, std::allocator<int> >                     Deque;
      typedef std::vector<int, std::allocator<int> >                    Vector;
      typedef std::ostream_iterator<int, char, std::char_traits<char> > Iter;
  
      // Initialize a deque with an array of integers.
      const Deque::value_type a[] = { 1, 2, 3, 4, 5, 6, 7 };
      Deque d (a + 0, a + sizeof a / sizeof *a);
  
      // Create an empty vector to store the factorials.
      Vector v (Vector::size_type (7));
  
      // Compute factorials of the contents of `d' store results in `v'.
      std::transform (d.begin (), d.end (), v.begin (),
                      std::ptr_fun (factorial));
  
      // Print the results.
      std::cout << "The following numbers: \n     ";
      std::copy (d.begin (), d.end (), Iter (std::cout," "));
  
      std::cout << "\n\nHave the factorials: \n     ";
      std::copy (v.begin (), v.end (), Iter (std::cout, " "));
      std::cout << std::endl;
  
      return 0;
  }
  