CHAPTER11-5.cpp
上传用户:fjc899
上传日期:2007-07-03
资源大小:187k
文件大小:2k
源码类别:

STL

开发平台:

C/C++

  1. //文件名:CHAPTER11-5.cpp
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iostream>
  5. // The function object multiplies an element by a Factor
  6. template <class Type>
  7. class MultValue
  8. {
  9. private:
  10.    Type Factor;   // The value to multiply by
  11. public:
  12.    // Constructor initializes the value to multiply by
  13.    MultValue ( const Type& _Val ) : Factor ( _Val ) {   }
  14.    // The function call for the element to be multiplied
  15.    void operator ( ) ( Type& elem ) const {elem *= Factor;}
  16. };
  17. // The function object to determine the average
  18. class Average
  19. {
  20. private:
  21.    long num;      // The number of elements
  22.    long sum;      // The sum of the elements
  23. public:
  24.    // Constructor initializes the value to multiply by
  25.    Average ( ) : num ( 0 ) , sum ( 0 )   {   }
  26.    // The function call to process the next elment
  27.    void operator ( ) ( int elem )
  28.    {   num++;      // Increment the element count
  29.       sum += elem;   // Add the value to the partial sum
  30.    }
  31.    // return Average
  32.    operator double ( ) {return  static_cast <double> (sum) / static_cast <double> (num);}
  33. };
  34. int main( )
  35. {
  36.    using namespace std;
  37.    vector <int> v1;
  38.    vector <int>::iterator Iter1;
  39.    // Constructing vector v1
  40.    int i;
  41.    for ( i = -4 ; i <= 2 ; i++ )  { v1.push_back(  i );}
  42.    cout << "Original vector  v1 = ( " ;
  43.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " ";
  44.    cout << ")." << endl;
  45.    // Using for_each to multiply each element by a Factor
  46.    for_each ( v1.begin ( ) , v1.end ( ) , MultValue<int> ( -2 ) );
  47.    cout << "Multiplying the elements of the vector v1n "<<  "by the factor -2 gives:n v1mod1 = ( " ;
  48.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " ";
  49.    cout << ")." << endl;
  50.    for_each (v1.begin ( ) , v1.end ( ) , MultValue<int> (5 ) );
  51.    cout << "Multiplying the elements of the vector v1modn "
  52.         <<  "by the factor 5 gives:n v1mod2 = ( " ;
  53.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " ";
  54.    cout << ")." << endl;
  55.    double avemod2 = for_each ( v1.begin ( ) , v1.end ( ) , Average ( ) );
  56.    cout << "The average of the elements of v1 is:n Average ( v1mod2 ) = "
  57.         << avemod2 << "." << endl;
  58. }