#include #include #include #include #include #include #include using namespace std ; class Timer { public: chrono::steady_clock::time_point start_time ; chrono::steady_clock::time_point end_time ; void startTime() { start_time = chrono::steady_clock::now() ; } void endTime() { end_time = chrono::steady_clock::now() ; } void printTime() { chrono::milliseconds elapsed_ms = chrono::duration_cast(end_time - start_time); cout << "Execution time: " << elapsed_ms.count() << " milliseconds" << endl; } }; //-------------------------------------------------------- //Assume vector can only contain positive numbers void removeDuplicates1( vector& v1 ) { set set1 ; int left = 0 ; for( int x1 : v1 ) { //not seen before if ( set1.count( x1 ) == 0 ) { v1[left++] = x1 ; } else { } set1.insert( x1 ) ; } //for v1.resize( left ) ; cout << "v1:size: " << v1.size() << endl ; } void removeDuplicates2( vector& v1 ) { int left = 1 ; // cout << "v1.size():" << v1.size() << endl ; for( int i1=1 ; i1 < v1.size() ; i1++ ) { //not seen before //cout << "i1: " << i1 << " " << "v1[i1]:" << v1[i1] << endl ; vector::iterator it = v1.begin() ; vector::iterator it1 = v1.begin() + i1 ; int value = v1[i1] ; vector::iterator it2 = find( it , it1, value ) ; //Did not find it in the left hand side of the //current position //cout << "*it2:" << *it2 << endl ; if ( it2 == it1 ) { // cout << "Did not find." << endl << endl ; v1[left++] = v1[i1] ; } } //for v1.resize( left ) ; cout << "v1:size: " << v1.size() << endl ; } int main() { //Assume vector can only contain positive numbers vector v1 ; int noElements = 100000 ; //int noElements = 2 ; Timer timerObject1 ; for( int i1=1 ; i1<=noElements ; i1++ ) { v1.push_back( i1 ) ; v1.push_back( i1 ) ; } //for timerObject1.startTime() ; removeDuplicates1( v1 ) ; timerObject1.endTime() ; timerObject1.printTime() ; v1.clear() ; for( int i1=1 ; i1<=noElements ; i1++ ) { v1.push_back( i1 ) ; v1.push_back( i1 ) ; } //for timerObject1.startTime() ; removeDuplicates2( v1 ) ; timerObject1.endTime() ; timerObject1.printTime() ; //----------------------------------------------- v1.clear() ; for( int i1=1 ; i1<=noElements ; i1++ ) { v1.push_back( i1 ) ; } //for for( int i1=1 ; i1<=noElements ; i1++ ) { v1.push_back( i1 ) ; } //for timerObject1.startTime() ; removeDuplicates1( v1 ) ; timerObject1.endTime() ; timerObject1.printTime() ; v1.clear() ; for( int i1=1 ; i1<=noElements ; i1++ ) { v1.push_back( i1 ) ; } //for for( int i1=1 ; i1<=noElements ; i1++ ) { v1.push_back( i1 ) ; } //for timerObject1.startTime() ; removeDuplicates2( v1 ) ; timerObject1.endTime() ; timerObject1.printTime() ; return 0; }