PDA

Visualizza la versione completa : [c++] rimuovere duplicati da vector di interi


freetom
10-10-2012, 16:37
Ho cercato nelle risposte passate ma questo argomento sembrerebbe non essere stato affrontato o almeno non riesco a ritrovarlo... :confused:

A me servirebbe un modo per eliminare doppioni e multipli di eventuali valori interi presenti in un mio determinato vector di interi appunto.

Es.

se ho 1,1,2,3,5,5,5,7,8,9,10

vorrei avere solo

1,2,3,4,5,6,7,8,9,10

Il vector è un

vector <int> input_int;

ma presenta appunto al suo interno valori doppioni o multipli che vorrei scremare...

Grazie a tutti/le gli/le esperti/e del favoloso quanto intricato (almeno per me) c++

:ciauz:

c0der
10-10-2012, 16:50
Lascio a te trovare il metodo giusto, è quasi alla fine comunque:
http://www.cplusplus.com/reference/stl/vector/

freetom
10-10-2012, 17:20
Originariamente inviato da c0der
Lascio a te trovare il metodo giusto, è quasi alla fine comunque:
http://www.cplusplus.com/reference/stl/vector/


Purtroppo da quella fonte non ho l'ho trovato...

però credo quasi di esserci arrivato... in un modo o nell'altro... :zizi:





//PROVA ELIMINAZIONE DOPPIONI.........................................

//ordino gli elementi in modo crescente...

sort(input_int.begin(),input_int.end());

//confronto gli elementi adiacenti e se sono uguali rimuovo l'ultimo di essi...

for (int b=0; b < input_int.size(); b++) {

if (input_int[b]==input_int[b+1]) {


//rimuovi elemento duplicato...

input_int.pop_back();


}

cout << "\n\n Verifica valori non duplicati in input_int: \n\n";



//visualizzo il vector con gli elementi rimasti...


for (int c=0; c < input_int.size(); c++) {

cout << input_int[c];
cout << "#";


}

cin.get();




Dico quasi perchè non riesco a rimuovere l'elemento doppione o multiplo (identificato dall'input_int[b+1]) anche se il confronto sembra avvenire correttamente senza alcun errore... :bhò:

Credo che il mio errore risieda nel:



input_int.pop_back();


che in effetti non è troppo mirato.. verso il target input_int[b+1] :madai!?:

c0der
10-10-2012, 21:51
erase?

freetom
10-10-2012, 21:58
Originariamente inviato da c0der
erase?

mi faresti l'es. di come utilizzarlo?

tnx!

:ciauz:

c0der
10-10-2012, 22:11
Se clicchi su qualunque metodo su cplusplus.com esce l'esempio:
http://www.cplusplus.com/reference/stl/vector/erase/

freetom
10-10-2012, 22:19
Originariamente inviato da c0der
Se clicchi su qualunque metodo su cplusplus.com esce l'esempio:
http://www.cplusplus.com/reference/stl/vector/erase/

Grazie ho visto la sintassi di utilizzo ma penso che allora non faccia al caso mio...




for (int b=0; b < input_int.size(); b++) {

if (input_int[b]==input_int[b+1]) {


//rimuovi elemento duplicato...
input_int.erase (input_int.begin()+1);


//input_int.pop_back();



}



ho provato ad utilizzarlo così ma in realtà erase sembra rimuovere solo posizioni fisse all'interno del vector ma non elementi scelti in run time... come servirebbe a me :popcorn:

MItaly
10-10-2012, 22:19
http://www.cplusplus.com/reference/algorithm/unique/

c0der
10-10-2012, 22:33
Senza ombra di dubbio usa la funzione MItaly che non conoscevo, c'è l'esempio anche lì.

freetom
10-10-2012, 22:56
Ci sono riuscito con unique!

:ciauz:

Adesso ho un'altra domanduzza...
ma apro un altro post come vogliono le regole del forum :)

Grazie ancora a tutti e due comunque.

:ciauz:

Loading