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

STL

开发平台:

C/C++

  1. //文件名:CHAPTER11-21.cpp
  2. #include <vector>
  3. #include <list>
  4. #include <algorithm>
  5. #include <functional>      // For greater<int>( )
  6. #include <iostream>
  7. // Return whether first element is greater than the second
  8. bool UDgreater ( int elem1, int elem2 )
  9. {   return elem1 > elem2;}
  10. int main( )
  11. {
  12.    using namespace std;
  13.    vector <int> v1,v2;
  14.    vector <int>::iterator Iter1, Iter2;
  15.    list <int> L1;
  16.    L1.push_back( 60 );
  17.    L1.push_back( 50 );
  18.    L1.push_back( 20 );
  19.    L1.push_back( 30 );
  20.    L1.push_back( 40 );
  21.    L1.push_back( 10 );
  22.    int i;
  23.    for ( i = 0 ; i <= 5 ; i++ )
  24.    {      v1.push_back( 2 * i );   }
  25.    int ii;
  26.    for ( ii = 0 ; ii <= 5 ; ii++ )
  27.    {      v1.push_back( 2 * ii + 1 );   }
  28.    cout << "Original vector v1 = ( " ;
  29.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
  30.       cout << *Iter1 << " ";
  31.    cout << ")" << endl;
  32.    sort( v1.begin( ), v1.end( ) );
  33.    cout << "Sorted vector v1 = ( " ;
  34.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
  35.       cout << *Iter1 << " ";
  36.    cout << ")" << endl;
  37.    // To sort in descending order. specify binary predicate
  38.    sort( v1.begin( ), v1.end( ), greater<int>( ) );
  39.    cout << "Resorted (greater) vector v1 = ( " ;
  40.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
  41.       cout << *Iter1 << " ";
  42.    cout << ")" << endl;
  43.    // A user-defined (UD) binary predicate can also be used
  44.    sort( v1.begin( ), v1.end( ), UDgreater );
  45.    cout << "Resorted (UDgreater) vector v1 = ( " ;
  46.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
  47.       cout << *Iter1 << " ";
  48.    cout << ")" << endl;
  49. // To partially sort in descending order, specify binary predicate
  50.    partial_sort(v1.begin( ), v1.begin( ) + 4, v1.end( ), greater<int>( ) );
  51.    cout << "Partially resorted (greater) vector:n v1 = ( " ;
  52.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
  53.       cout << *Iter1 << " ";
  54.    cout << ")" << endl;
  55.    // A user-defined (UD) binary predicate can also be used
  56.    partial_sort(v1.begin( ), v1.begin( ) + 8, v1.end( ), 
  57.  UDgreater );
  58.    cout << "Partially resorted (UDgreater) vector:n v1 = ( " ;
  59.    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
  60.       cout << *Iter1 << " ";
  61.    cout << ")" << endl;
  62. // Copying a partially sorted copy of L1 into v2
  63.    for ( ii = 0 ; ii <= 9 ; ii++ )
  64.    {      v2.push_back( ii );   }
  65.    random_shuffle( v2.begin( ), v2.end( ) );
  66.    vector <int>::iterator result2;
  67.    result2 = partial_sort_copy (L1.begin( ), L1.end( ), v2.begin( ), 
  68.           v2.begin( ) + 6, greater<int>( ) );
  69.    cout << "List L1 into Vector v2 = ( " ;
  70.    for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
  71.       cout << *Iter2 << " ";
  72.    cout << ")" << endl;
  73.    cout << "The first v2 element one position beyond"
  74.         << "n the last L 1 element inserted was " << *result2 
  75.         << "." << endl;
  76. }