CHAPTER11-20.cpp
上传用户:fjc899
上传日期:2007-07-03
资源大小:187k
文件大小:2k
- //文件名:CHAPTER11-20.cpp
- #include <vector>
- #include <algorithm>
- #include <functional>
- #include <iostream>
- #include <ostream>
- using namespace std;
- // Return whether modulus of elem1 is equal to modulus of elem2
- bool mod_equal ( int elem1, int elem2 )
- {
- if ( elem1 < 0 ) elem1 = - elem1;
- if ( elem2 < 0 ) elem2 = - elem2;
- return elem1 == elem2;
- };
- int main( )
- {
- vector <int> v1;
- vector <int>::iterator v1_Iter1, v1_Iter2, v1_Iter3,
- v1_NewEnd1, v1_NewEnd2, v1_NewEnd3;
- int i;
- for ( i = 0 ; i <= 3 ; i++ )
- {
- v1.push_back( 5 );
- v1.push_back( -5 );
- }
- int ii;
- for ( ii = 0 ; ii <= 3 ; ii++ )
- { v1.push_back( 4 ); }
- v1.push_back( 7 );
- cout << "Vector v1 is ( " ;
- for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1.end( ) ; v1_Iter1++ )
- cout << *v1_Iter1 << " ";
- cout << ")." << endl;
- // Remove consecutive duplicates
- v1_NewEnd1 = unique ( v1.begin ( ) , v1.end ( ) );
- cout << "Removing adjacent duplicates from vector v1 givesn ( " ;
- for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1_NewEnd1 ; v1_Iter1++ )
- cout << *v1_Iter1 << " ";
- cout << ")." << endl;
- // Remove consecutive duplicates under the binary prediate mod_equals
- v1_NewEnd2 = unique ( v1.begin ( ) , v1_NewEnd1 , mod_equal );
- cout << "Removing adjacent duplicates from vector v1 under then "
- << " binary predicate mod_equal givesn ( " ;
- for ( v1_Iter2 = v1.begin( ) ; v1_Iter2 != v1_NewEnd2 ; v1_Iter2++ )
- cout << *v1_Iter2 << " ";
- cout << ")." << endl;
- // Remove elements if preceded by an element that was greater
- v1_NewEnd3 = unique ( v1.begin ( ) , v1_NewEnd2, greater<int>( ) );
- cout << "Removing adjacent elements satisfying the binaryn "
- << " predicate mod_equal from vector v1 gives ( " ;
- for ( v1_Iter3 = v1.begin( ) ; v1_Iter3 != v1_NewEnd3 ; v1_Iter3++ )
- cout << *v1_Iter3 << " ";
- cout << ")." << endl;
- }