#include #include "hsort.h" namespace My_region { double conversione = 20.0/RAND_MAX; int num_cicli; int num_scambi; vector::vector() { num = 1000; v = new double [num]; varianza = 0.0; for ( int i=0; i < num; i++) { v[i] = rand()*conversione-10.0; varianza += v[i]*v[i]; } varianza /= num; } vector::vector(const vector& vec) { num = vec.num; varianza = vec.varianza; v = new double [num]; for ( int i=0; i < num; i++) v[i] = vec.v[i]; } vector::~vector() { delete [] v; } vector& vector::operator =(const vector& vec) { if (this == &vec) return *this; //in caso di auto-assegnazione if ( num != vec.num ) { delete [] v; num = vec.num; v = new double [num]; } varianza = vec.varianza; for ( int i=0; i < num; i++) v[i] = vec.v[i]; return *this; } bool operator<(const vector& vec1, const vector& vec2) { return vec1.varianza < vec2.varianza; } bool operator==(const vector& vec1, const vector& vec2) { if ( vec1.varianza != vec2.varianza ) return false; if ( vec1.num != vec2.num ) return false; int i=0; while( i < vec1.num && vec1.v[i] == vec2.v[i] ) i++; return i == vec1.num; } struct hvector::rappr { int num; double* v; double varianza; int conta; rappr(); ~rappr() { delete [] v; } }; hvector::rappr::rappr() : conta(1) { num = 1000; v = new double [num]; varianza = 0.0; for ( int i=0; i < num; i++) { v[i] = rand()*conversione-10.0; varianza += v[i]*v[i]; } varianza /= num; } hvector::hvector() { prappr = new rappr; } hvector::hvector(const hvector& hvec) { hvec.prappr->conta++; prappr = hvec.prappr; // condivide la rappresentazione di hvec } hvector::~hvector() { if ( --prappr->conta == 0 ) delete prappr; } hvector& hvector::operator=(const hvector& hvec) { hvec.prappr->conta++; // prima questa istuzione, per prottegersi // dalle auto-assegnazioni if ( --prappr->conta == 0 ) delete prappr; prappr = hvec.prappr; // condivide la rappresentazione di hvec return *this; } bool operator<(const hvector& hvec1, const hvector& hvec2) { return hvec1.prappr->varianza < hvec2.prappr->varianza; } bool operator==(const hvector& hvec1, const hvector& hvec2) { if ( hvec1.prappr->varianza != hvec2.prappr->varianza ) return false; if ( hvec1.prappr->num != hvec2.prappr->num ) return false; int i=0; while( i < hvec1.prappr->num && hvec1.prappr->v[i] == hvec2.prappr->v[i] ) i++; return i == hvec1.prappr->num; } }