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

    [c++] sottrazione di due vector

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


  2. #2
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

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

    Avrei trovato questa funzione set_difference

    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/a...et_difference/

    l'ho provata ad implementare cosi'...


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


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

    Mi faresti un es. pratico?

    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!


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

    Re: Mi faresti un es. pratico?

    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!

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

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

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

    Re: Re: Mi faresti un es. pratico?


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

    Re: Re: Mi faresti un es. pratico?

    Non funzia...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.