Partager via


random_shuffle

Réorganise une séquence d'éléments N dans une plage dans un N!dispositions possibles sélectionnées au hasard.

template<class RandomAccessIterator>
   void random_shuffle(
      RandomAccessIterator _First, 
      RandomAccessIterator _Last
   );
template<class RandomAccessIterator, class RandomNumberGenerator>
   void random_shuffle(
      RandomAccessIterator _First, 
      RandomAccessIterator _Last, 
      RandomNumberGenerator& _Rand
   );

Paramètres

  • _First
    Un itérateur d'accès aléatoire adressant la position du premier élément dans la plage à réorganiser.

  • _Last
    Un itérateur d'accès aléatoire adressant une position au delà de le dernier élément dans la plage à réorganiser.

  • _Rand
    Un objet de fonction spéciale appelée un générateur de nombres aléatoires.

Notes

Les deux versions de la fonction différences dans la manière dont ils génèrent des nombres aléatoires.La première version utilise un générateur de nombres aléatoires interne et le second est un objet de nombres aléatoires de fonction de générateur qui est passé explicitement et peut accepter une valeur de départ.

Exemple

// alg_random_shuffle.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>

int main( ) {
   using namespace std;
   vector <int> v1;
   vector <int>::iterator Iter1, Iter2;

   int i;
   for ( i = 1 ; i <= 9 ; i++ )
      v1.push_back( i );

   random_shuffle( v1.begin( ), v1.end( ) );
   cout << "The original version of vector v1 is: ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Shuffled once
   random_shuffle( v1.begin( ), v1.end( ));
   push_heap( v1.begin( ), v1.end( ) );
   cout << "Vector v1 after one shuffle is:       ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Shuffled again
   random_shuffle( v1.begin( ), v1.end( ));
   push_heap( v1.begin( ), v1.end( ) );
   cout << "Vector v1 after another shuffle is:   ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;
}

Résultat de l'exemple

The original version of vector v1 is: ( 9 2 7 3 1 6 8 4 5 ).
Vector v1 after one shuffle is:       ( 1 4 7 9 2 5 8 6 3 ).
Vector v1 after another shuffle is:   ( 3 2 8 5 4 9 6 7 1 ).

Configuration requise

en-tête : <algorithm>

l'espace de noms : DST

Voir aussi

Référence

Predicate Version of random_shuffle

random_shuffle (STL Samples)

Modèles Standard