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

    [c++] ripulire vector da valori in presenza multipla...

    Ho un vector numeri contenente valori dinamici che talvolta possono risultare presenti più volte... Avrei necessità di eliminare tutte le occorrenze oltre la prima di ogni numero presente nel vector.

    es:

    2,4,9,10,14,16,25,27,30,33,36,37,39,40,41,44,46,48 ,49,51,61,64,65,69,73,76,78,82,84,86,87,90,90,90,9 0,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, 90,90,90,90,90,90,90,90,90,90,90,90,

    qui andrebbero bene tutti tranne il 90 che deve essere ripulito da tutte le presenze eccedenti la prima...

    e ottenere sempre secondo esempio:

    2,4,9,10,14,16,25,27,30,33,36,37,39,40,41,44,46,48 ,49,51,61,64,65,69,73,76,78,82,84,86,87,90

    Come potrei fare?

    Grazie


  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il modo più semplice è riversare tutto in un set.
    codice:
    set<int> unique_values(vector_casual.begin(),vector_casual.end());
    vector_casual.clear();
    std::copy(unique_values.begin(),unique_values.end(),back_inserter(vector_casual));
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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

    E per riprenderne i valori?

    Originariamente inviato da shodan
    Il modo più semplice è riversare tutto in un set.
    codice:
    set<int> unique_values(vector_casual.begin(),vector_casual.end());
    vector_casual.clear();
    std::copy(unique_values.begin(),unique_values.end(),back_inserter(vector_casual));
    E ad esempio visualizzarli?

    Es..

    codice:
    for (int h=0; h<unique_values.size();h++) 
    {
    
    cout << unique_values[h];
    
    }
    da errore in quanto un set è diverso rispetto ad un vector anche per quanto riguarda il visualizzare i suoi valori ma non ricordo come in quest ultimo caso si possano visualizzare i valori immessi...

    tnx


  4. #4
    Per visualizzare i valori in un set, usa gli iteratori come faccio in (1)

    Codice PHP:
    #include <iostream>
    #include <set>
    #include <vector>

    using namespace std;

    int main(){
        
    vector<intvector_casual;
        
        for(
    int i 05i++)
        {
            
    vector_casual.push_back(i);
            
    vector_casual.push_back(i);
        }
        
        
    set<intunique_values(vector_casual.begin(),vector_casual.end());
        
    vector_casual.clear();
        
    std::copy(unique_values.begin(),unique_values.end(),back_inserter(vector_casual));
        
        
        for(
    set<int>::iterator i unique_values.begin(); != unique_values.end(); i++)    
            
    cout << *<< " | "//<- 1
        
    cout << endl;
        
        for(
    int i vector_casual.size(); i++)
            
    cout << vector_casual.at(i) << " | "//<- 2
        
    cout << endl;
        for(
    vector<int>::iterator i vector_casual.begin(); != vector_casual.end(); i++)
            
    cout << *<< " | "//<- 3
        

    nota però che la copy ti copia i valori nel vector, quindi puoi usare (2) o (3) per visualizzarli.
    Ti consiglio di usare at per i vettori, al posto dell'operatore[], in quanto più sicuro (fa controlli sull'indice)

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il modo più semplice è:
    codice:
    std::copy(unique_values.begin(),unique_values.end(),ostream_iterator<int,char>(cout,' - '));
    quello banale:
    codice:
    set<int>::iterator it;
    
    for (it = unique_values.begin(); it!=  unique_values.end(); ++it) {
        cout << *it << ' - ';
    }
    cout << endl;
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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

    grazie amici avrei scelto il + banale.. :)

    ma... mi da uno strano... errore :-(

    codice:
    set<int>::iterator it;
    
    
    set<int> unique_values(usciti.begin(),usciti.end());
    usciti.clear();
    std::copy(unique_values.begin(),unique_values.end(),back_inserter(usciti));
    
    for (it = unique_values.begin(); it!=  unique_values.end(); ++it) {
        
        cout << *it << ' - ';
    
    cout << endl;
    
        string uscitistringa;
        uscitistringa = intToString(*it);
    	
        string datiscelti= uscitistringa+",";
        //string datiscelti= ",";
    
    	fout2 << datiscelti;
    	//fout2 << "\n";
      
      }
      }
    l'errore è questo:
    multi-character character constant

    tnx ancora


  7. #7
    codice:
    cout << *it << ' - ';
    per indicare i caratteri si usa ' (es 'c')
    per indicare stringhe " (es "ciao")

    deve essere

    codice:
    cout << *it << " - ";

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    ma... mi da uno strano... errore :-(
    Pensavo avessi capito che era scritto staccato per chiarezza.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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

    grazie!


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.