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? 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. P> p>
3 Réponses :
Vous voulez le RAND () Fonction . Utilisez-le pour générer un index aléatoire dans votre vecteur. P>
Depuis 2011, cela n'est plus recommandé. Utilisez #include
Merci pour les commentaires. Je l'ai compris.
+ 0 code> ne fait rien et votre utilisation de
rand () code> est archaïque mais probablement bien pour vos besoins
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 << " "; }
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 code> à
myvec.Size () - 1 < / code>). Générez une telle valeur et l'ajoutez-le à
myvec.begin () code> pour obtenir un itérateur qui fait référence à un élément de
myvec code>.
@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 code> 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