random_shuffle
Ridisporre una sequenza di elementi N in un intervallo in una di N!disposizioni possibili selezionate casualmente.
template<class RandomAccessIterator>
void random_shuffle(
RandomAccessIterator _First,
RandomAccessIterator _Last
);
template<class RandomAccessIterator, class RandomNumberGenerator>
void random_shuffle(
RandomAccessIterator _First,
RandomAccessIterator _Last,
RandomNumberGenerator& _Rand
);
Parametri
_First
Un iteratore di accesso casuale destinato alla posizione del primo elemento nell'intervallo da riordinare._Last
Un iteratore di accesso casuale destinato alla posizione una dopo l'elemento finale nell'intervallo da riordinare._Rand
Un oggetto funzione speciale denominato un generatore di numeri casuali.
Note
Le due versioni della funzione differiscono in come generano numeri casuali.La prima versione utilizza un generatore di numeri casuali interno e il secondo un oggetto funzione del generatore di numeri casuali che esplicitamente viene passato e può accettare un valore di inizializzazione.
Esempio
// 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;
}
Esempio di output
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 ).
Requisiti
intestazione: <algorithm>
Spazio dei nomi: deviazione standard