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

    [c++] Dato un vector di interi pescare... in modo random uno o più elementi...

    Ho ad esempio

    vector <int> numeri;

    che contiene interi del tipo

    1
    10
    35
    70
    24
    27
    28
    75
    77
    90

    ecc...

    bene... io vorrei riuscire a prelevare in modo random
    uno o due elementi da questo vector...



    per avere ad esempio...
    due valori estratti casualmente dal vector numeri ben definito.

    int estratto1 = 35
    int estratto2 = 10

    tnx

  2. #2
    codice:
    #include <vector>
    #include <cstdlib>
    
    //...
    
    vector <int> numeri;
    srand(time(NULL));
    // ...
    int estratto = numeri[rand()%numeri.size()];
    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

    Grazie mille però...

    Originariamente inviato da MItaly
    codice:
    #include <vector>
    #include <cstdlib>
    
    //...
    
    vector <int> numeri;
    srand(time(NULL));
    // ...
    int estratto = numeri[rand()%numeri.size()];
    Io dovrei estrarre numeri casuali in un vector ben definito che siano anche l'uno diverso dall'altro fino al completamento della sestina...

    codice:
       for (int x=0; x<6; x++) {  
       
        srand(time(NULL));
    
        int estratto = numeri[rand()%duplicati.size()];
    
        
        cout << "\n\n";
        cout << "ESEMPIO DI NUMERO RANDOM PRESO DA VECTOR BEN DEFINITO: ";
        cout << estratto;
        
        
        sestina.push_back(estratto);
        
        
        }
    Per adesso però il codice mi estrae e inserisce sempre un solo elemento
    come potrei rimediare?

    Grazie ancora!


  4. #4
    Puoi marcare l'elemento come già pescato, ad esempio in questo modo
    codice:
        int indice;
        int estratto=-1;
        while(estratto<=0)
        {
            indice = rand()%numeri.size()
            estratto = numeri[indice];
        }
        numeri[indice] = -1;
    oppure puoi proprio rimuovere il vector con quell'indice ad ogni iterazione, nel qual caso però potrebbe essere più efficiente una lista come container.
    codice:
        int indice = rand()%numeri.size();
        int estratto = numeri[indice];
        numeri.erase(numeri.begin()+indice);
    Amaro C++, il gusto pieno dell'undefined behavior.

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.