Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] rimuovere duplicati da vector di interi

    Ho cercato nelle risposte passate ma questo argomento sembrerebbe non essere stato affrontato o almeno non riesco a ritrovarlo...

    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++


  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Lascio a te trovare il metodo giusto, è quasi alla fine comunque:
    http://www.cplusplus.com/reference/stl/vector/

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    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...

    codice:
    
    //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...

    Credo che il mio errore risieda nel:

    codice:
     input_int.pop_back();
    che in effetti non è troppo mirato.. verso il target input_int[b+1]

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    erase?

  5. #5
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da c0der
    erase?
    mi faresti l'es. di come utilizzarlo?

    tnx!


  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Se clicchi su qualunque metodo su cplusplus.com esce l'esempio:
    http://www.cplusplus.com/reference/stl/vector/erase/

  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    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...

    codice:
    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

  8. #8
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Senza ombra di dubbio usa la funzione MItaly che non conoscevo, c'è l'esempio anche lì.

  10. #10
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    grazie

    Ci sono riuscito con unique!



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

    Grazie ancora a tutti e due comunque.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.