0
votes

Comment effacer un élément au hasard d'un vecteur?

J'aimerais savoir comment je peux effacer un élément dans un vecteur au hasard. Par exemple, j'ai un vecteur qui a des entiers 1,2,3,4,5 dedans. Je veux effacer une de ces personnes au hasard. Comment ferais-je une telle chose? XXX

ci-dessus est le code que j'ai jusqu'à présent. C'est une déclaration si et d'autre qui vérifie si le vecteur est vide ou non et efface un élément. Le problème est que je ne suis pas sûr comment l'obtenir pour supprimer un élément aléatoire. Pour le moment, il ne supprime que le premier élément.


3 commentaires

Si vous recherchez ici "[C ++] génère un numéro aléatoire", vous trouverez des descriptions de la manière de générer des valeurs aléatoires dans une plage (par exemple, de 0 à myvec.Size () - 1 < / code>). Générez une telle valeur et l'ajoutez-le à myvec.begin () pour obtenir un itérateur qui fait référence à un élément de myvec .


@matany: Lorsque vous apprenez à programmer, il aide à décomposer le problème en petits morceaux. Pouvez-vous supprimer le 2e élément? Pouvez-vous écrire une fonction qui prend un int i et supprime le i'th élément? Après cela, il vous suffit d'appeler cette fonction avec une valeur aléatoire.


@Msalters oui je peux retirer le deuxième élément en ajoutant +1 après le début


3 Réponses :


-1
votes

Vous voulez le RAND () Fonction . Utilisez-le pour générer un index aléatoire dans votre vecteur.


1 commentaires

Depuis 2011, cela n'est plus recommandé. Utilisez #include à la place (sauf si vous êtes coincé sur un compilateur vraiment ancien): https://stackoverflow.com/questions/19665818/Generate-Random -Numbers-UTILIS-UTILIS-UTILIS-ODM ANDOM-Bibliothèque



0
votes

Merci pour les commentaires. Je l'ai compris. XXX


1 commentaires

+ 0 ne fait rien et votre utilisation de rand () est archaïque mais probablement bien pour vos besoins



0
votes

Utilisez un générateur d'entiers aléatoires pour générer un entier de (0 à la taille de votre vecteur -1), puis utilisez Effacer avec le numéro généré, comme suit

#include<random>
#include<chrono>
#include<vector>
int main()
{
    std::vector <int> myVec {1,2,3,4,5};

    //creat a random engine object and seed it 
    std::default_random_engine engineObj(std::chrono::system_clock::now().time_since_epoch().count());
    //The distribution will be used
    std::uniform_int_distribution<size_t> randomInt{0ul, myVec.size()-1};

    //Erase
    myVec.erase(myVec.begin() + randomInt(engineObj));

    //Test
    for(auto const & el: myVec) std::cout << el << " ";
    }


0 commentaires