PDA

Visualizza la versione completa : [c++] sottrazione di due vector


freetom
10-10-2012, 22:02
//PROVA SOTTRAZIONE DI VECTOR ----------------------------------------


for (int g=0; g<input_int.size();g++) {
for (int h=0; h<sessantina.size();h++) {

if (input_int[g] == sessantina[h]) {

//rimuovi dal vector... vector1

remove(input_int.begin(), sessantina.end(), input_int[g]);


}
}
}

//--------------------------------------------------------------------------------


Sono due vector di interi però se vado a verificare quanti ne restano sia nell'uno che nellìaltro vector vedo che la sottrazione non ha funzionato...

Es: vector sessantina contiene 60 elementi numerici da 1 a 60
e vector input_int contiene ad esempio i valori da 1 a 30

il risultato della sottrazione non è contenente come dovrebbe valori da 41 a 60

ma gli stessi valori per entrambi i vector senza alcuna modifica...

Secondo voi dove è l'errore?

Grazie 1000

:ciauz:

MItaly
10-10-2012, 22:07
remove non si usa in quel modo e non rimuove effettivamente gli elementi, ma li sposta in fondo; devi usare l'iteratore che ti viene restituito per eliminare questi ultimi usando erase.

freetom
10-10-2012, 23:21
Originariamente inviato da MItaly
remove non si usa in quel modo e non rimuove effettivamente gli elementi, ma li sposta in fondo; devi usare l'iteratore che ti viene restituito per eliminare questi ultimi usando erase.

che dovrebbe proprio essere quella che cerco ma non riesco ad adattarla ai miei due vector...

http://www.cplusplus.com/reference/algorithm/set_difference/

l'ho provata ad implementare cosi'...






//PROVA SOTTRAZIONE DI VECTOR ---------------------------------------- riuscito! (da verificare...)


//int first[] = {5,10,15,20,25};
//int second[] = {50,40,30,20,10};
vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0
vector<int>::iterator it2;

sort(input_int.begin(),input_int.end());// 5 10 15 20 25
sort(sessantina.begin(),sessantina.end()); // 10 20 30 40 50

it=set_difference (first, first+5, second, second+5, v.begin()); // 5 15 25 0 0 0 0 0 0 0

cout << "difference has " << int(it2 - v.begin()) << " elements.\n";

cin.get();


//---------------------------------------------------------------------




se cambio infatti first con input_int e second con sessantina mi da errore...

:biifu:

freetom
11-10-2012, 15:57
Originariamente inviato da MItaly
remove non si usa in quel modo e non rimuove effettivamente gli elementi, ma li sposta in fondo; devi usare l'iteratore che ti viene restituito per eliminare questi ultimi usando erase.

Non risceo ad implementare remove ed erase in modo corretto...

Parametri fittizi per es. pratico:

vector <int> vec1;

vector <int> vec2;

Operazione voluta:

vec1-vec2

Grazie mille!

:ciauz:

freetom
11-10-2012, 16:00
Originariamente inviato da freetom
Non risceo ad implementare remove ed erase in modo corretto...

Parametri fittizi per es. pratico:

vector <int> vec1;

vector <int> vec2;

Operazione voluta:

vec1-vec2

Grazie mille!

:ciauz:

Forse sono riuscito a trovare la soluzione... in una mia vecchia domanda ripsota autorisolta pergiunta :zizi:




for (int g=0; g<vector1.size();g++) {
for (int h=0; h<vector2.size();h++) {

if (vector1[g]==vector2[h]) {

//rimuovi dal vector... vector1

remove(vector1.begin(), vector2.end(), vector1[g]);


}
}
}



Come non detto allora e grazie comunque! :ciauz:

freetom
11-10-2012, 16:08
:sbav:

freetom
11-10-2012, 16:10
Non funzia... :confused:

Loading