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

STL

开发平台:

C/C++

  1. //文件名:CHAPTER11-20.cpp
  2. #include <vector>
  3. #include <algorithm>
  4. #include <functional>
  5. #include <iostream>
  6. #include <ostream>
  7. using namespace std;
  8. // Return whether modulus of elem1 is equal to modulus of elem2
  9. bool mod_equal ( int elem1, int elem2 )
  10. {
  11.    if ( elem1 < 0 )  elem1 = - elem1;
  12.    if ( elem2 < 0 )  elem2 = - elem2;
  13.    return elem1 == elem2;
  14. };
  15. int main( )
  16. {
  17.    vector <int> v1;
  18.    vector <int>::iterator v1_Iter1, v1_Iter2, v1_Iter3,
  19.          v1_NewEnd1, v1_NewEnd2, v1_NewEnd3;
  20.    int i;
  21.    for ( i = 0 ; i <= 3 ; i++ )
  22.    {
  23.       v1.push_back( 5 );
  24.       v1.push_back( -5 );
  25.    }
  26.    int ii;
  27.    for ( ii = 0 ; ii <= 3 ; ii++ )
  28.    {      v1.push_back( 4 );   }
  29.    v1.push_back( 7 );
  30.    cout << "Vector v1 is ( " ;
  31.    for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1.end( ) ; v1_Iter1++ )
  32.       cout << *v1_Iter1 << " ";
  33.    cout << ")." << endl;
  34.    // Remove consecutive duplicates
  35.    v1_NewEnd1 = unique ( v1.begin ( ) , v1.end ( ) );
  36.    cout << "Removing adjacent duplicates from vector v1 givesn ( " ;
  37.    for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1_NewEnd1 ; v1_Iter1++ )
  38.       cout << *v1_Iter1 << " ";
  39.    cout << ")." << endl;
  40.    // Remove consecutive duplicates under the binary prediate mod_equals
  41.    v1_NewEnd2 = unique ( v1.begin ( ) , v1_NewEnd1 , mod_equal );
  42.    cout << "Removing adjacent duplicates from vector v1 under then "
  43.         << " binary predicate mod_equal givesn ( " ;
  44.    for ( v1_Iter2 = v1.begin( ) ; v1_Iter2 != v1_NewEnd2 ; v1_Iter2++ )
  45.       cout << *v1_Iter2 << " ";
  46.    cout << ")." << endl;
  47.    // Remove elements if preceded by an element that was greater
  48.    v1_NewEnd3 = unique ( v1.begin ( ) , v1_NewEnd2, greater<int>( ) );
  49.    cout << "Removing adjacent elements satisfying the binaryn "
  50.         << " predicate mod_equal from vector v1 gives ( " ;
  51.    for ( v1_Iter3 = v1.begin( ) ; v1_Iter3 != v1_NewEnd3 ; v1_Iter3++ )
  52.       cout << *v1_Iter3 << " ";
  53.    cout << ")." << endl;
  54. }