Compartir a través de


random_shuffle

¡Reorganiza una secuencia de elementos n de un intervalo de n!organizaciones posibles seleccionado al azar.

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

Parámetros

  • _First
    Un iterador de acceso aleatorio que dirige la posición del primer elemento del intervalo que se reorganizará.

  • _Last
    Un iterador de acceso aleatorio que dirige la posición una más allá del último elemento en el intervalo que se reorganizará.

  • _Rand
    Un objeto de función especial denominada un generador de números aleatorios.

Comentarios

Las dos versiones de la función difieren en cómo generan números aleatorios.La primera versión usa un generador interno de números aleatorios y el segundo un objeto de función generador de números aleatorios que explícitamente se pasa y puede aceptar un valor de inicialización.

Ejemplo

// 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;
}

Resultados del ejemplo

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 ).

Requisitos

encabezado: <algoritmo>

espacio de nombres: std

Vea también

Referencia

Predicate Version of random_shuffle

random_shuffle (STL Samples)

Biblioteca de plantillas estándar