melange d'elements dans vector crée doublons
Bonjour,
je stocke une jeu de cartes dans un vector, et j'ai écrit une méthode permettant de mélanger les cartes.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Croupier
{
public :
static std::vector<Carte> Paquet;
static std::vector<Carte> Defausse;
Croupier() {/*nothing to do */}
~Croupier() {/*nothing to do*/}
void Melanger()
{
int i = 0;
for (auto c : Paquet)
{
do
{
i = rand() % Paquet.size();
}while (Paquet.at(i) == c);
std::swap(c, Paquet.at(i));
}
} |
dans le main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
std::vector<Carte> Jeu::Croupier::Paquet;
int main()
{
//initialisation des textures des cartes
Carte::InitTextureCartes();
//initialisation de la graine
srand((unsigned)time(NULL));
//instanciation de la fenetre
sf::RenderWindow App(sf::VideoMode(width,height,32), "testSFML");
//instanciation des joueurs
Joueurs::Joueur j1("Kamui"), j2("Alu"), j3("7"), j4("TeK");
//instanciation du croupier
Jeu::Croupier c;
//le croupier choisit un jeu de 32 cartes
c.Init_32_cartes();
c.Melanger();
Joueurs::Distribuer(Jeu::Croupier::Paquet);
//[...] |
Apres c.init_32_cartes(); si je vérifie le contenu du vector rien à dire, tout est normal.
Apres c.Melanger();, des doublons sont apparus et (forcément) des cartes ont disparu...
Je cherche depuis un bon moment une explication maintenant, mais je ne trouve rien dans cet algo qui ne pose problème...
(j'ai un petit doute sur ce que fait swap dans mon cas d'utilisation...)
Vous avez une idée?