#include #include #include #include using namespace std; class Set { public: int size( ) const { return items.size( ); } bool isEmpty( ) const { return size( ) == 0; } void clear( ) { items.clear( ); } bool add( const string & x ) { if( contains( x ) ) return false; items.push_back( x ); return true; } bool remove( const string & x ) { int pos = findPos( x ); if( pos < 0 ) return false; items[ pos ] = items.back( ); items.pop_back( ); return true; } bool contains( const string & x ) const { return findPos( x ) >= 0; } private: vector items; int findPos( const string & x ) const { for( int i = 0; i < items.size( ); i++ ) if( items[ i ] == x ) return i; return -1; } }; const int PRIME1 = 11; const int PRIME2 = 13; const int SIZE = 37; string makeString( int x ) { ostringstream os; os << x; return os.str( ); } int main( ) { Set s1; for( int i = PRIME1; i != 0; i = (i + PRIME1 ) % SIZE ) { s1.add( makeString( i ) ); } cout << boolalpha; cout << "Size is: " << s1.size( ) << endl; for( int i = 1; i < SIZE; i++ ) if( !s1.contains( makeString( i ) ) ) cout << "OOPS #1 " << i << endl; if( s1.contains( makeString( SIZE ) ) ) cout << "OOPS #2 " << s1.size( ) << endl; Set s2 = s1; Set s3; s3 = s1; for( int i = PRIME2; i != 0; i = ( i + PRIME2 ) % SIZE ) s1.remove( makeString( i ) ); for( int i = 0; i < SIZE; i++ ) if( s1.contains( makeString( i ) ) ) cout << "OOPS #3 " << i << endl; cout << "s1 Size is: " << s1.size( ) << endl; cout << "s2 Size is: " << s2.size( ) << endl; cout << "s3 Size is: " << s3.size( ) << endl; return 0; }