122 votes

Comment mélanger un std::vector ?

Je cherche un moyen générique et réutilisable de mélanger une std::vector en C++. C'est ainsi que je le fais actuellement, mais je pense que ce n'est pas très efficace car il faut un tableau intermédiaire et il faut connaître le type d'élément (DeckCard dans cet exemple) :

srand(time(NULL));

cards_.clear();

while (temp.size() > 0) {
    int idx = rand() % temp.size();
    DeckCard* card = temp[idx];
    cards_.push_back(card);
    temp.erase(temp.begin() + idx);
}

0 votes

Non. cherchez fisher-yates....

5 votes

Essayez de ne pas utiliser rand() il existe de meilleures API de RNG (Boost.Random ou 0x <random> ).

0 votes

0voto

Ocezo Points 1

Selon la norme que vous devez suivre (C++11/C++14/C++17), cette page "cppreference" fournit d'assez bons exemples : https://en.cppreference.com/w/cpp/algorithm/random_shuffle .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X