Uso de la función STL de random_shuffle en Visual C++
En este artículo se describe cómo usar la random_shuffle
función Biblioteca de plantillas estándar (STL) en Visual C++.
Versión original del producto: Visual C++
Número de KB original: 156994
Encabezado obligatorio
<algorithm>
Prototipo
template<class RandomAccessIterator, class Predicate> inline
void random_shuffle(RandomAccessIterator first,
RandomAccessIterator last,
Predicate pred)
Nota:
Los nombres de clase o parámetro del prototipo no coinciden con la versión original del archivo de encabezado. Se han modificado para mejorar la legibilidad.
Descripción
El random_shuffle
algoritmo ordena de forma aleatoria los elementos de una secuencia (en primer lugar. último) en un orden aleatorio.
La versión del predicado usa la función previa para generar los índices de los elementos que se van a intercambiar. El pred tiene que ser un objeto de función que toma un parámetro n y devuelve un número aleatorio entero en el intervalo de 0 a (n - 1).
La versión de predicado de random_shuffle
usa operator=
para realizar intercambios.
Código de ejemplo
//////////////////////////////////////////////////////////////////////
// Compile options needed: /GX
// random_shuffle.cpp: Illustrates how to use the predicate version
// of the random_shuffle function.
// Functions:
// random_shuffle: Shuffle the elements in a random order.
// Rand: Given n, generates an integral random number in the
// in the range 0 - (n - 1).
// of Microsoft Product Support Services,
// Software Core Developer Support.
// Copyright (c) 1996 Microsoft Corporation. All rights reserved.
//////////////////////////////////////////////////////////////////////
// disable warning C4786: symbol greater than 255 character,
// okay to ignore
#pragma warning(disable: 4786)
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
// return an integral random number in the range 0 - (n - 1)
int Rand(int n)
{
return rand() % n ;
}
void main()
{
const int VECTOR_SIZE = 8 ;
// Define a template class vector of int
typedef vector<int, allocator<int> > IntVector;
//Define an iterator for template class vector of strings
typedef IntVector::iterator IntVectorIt;
IntVector Numbers(VECTOR_SIZE);
IntVectorIt start, end, it;
// Initialize vector Numbers
Numbers[0] = 4;
Numbers[1] = 10;
Numbers[2] = 70;
Numbers[3] = 30;
Numbers[4] = 10;
Numbers[5] = 69;
Numbers[6] = 96;
Numbers[7] = 100;
start = Numbers.begin(); // location of first
// element of Numbers
end = Numbers.end(); // one past the location
// last element of Numbers
cout << "Before calling random_shuffle:\n" << endl;
// print content of Numbers
cout << "Numbers { ";
for(it = start; it != end; it++)
cout << *it << " ";
cout << " }\n" << endl;
// shuffle the elements in a random order.
// the pointer_to_unary_function adapter converts a function to a
// function object.
random_shuffle(start, end, pointer_to_unary_function<int, int>(Rand));
cout << "After calling random_shuffle:\n" << endl;
cout << "Numbers { ";
for(it = start; it != end; it++)
cout << *it << " ";
cout << " }\n" << endl;
}
Salida del programa:
Before calling random_shuffle
Numbers { 4 10 70 30 10 69 96 100 }
After calling random_shuffle
Numbers { 10 30 4 70 96 100 69 10 }
Referencias
Para obtener más información sobre la random_shuffle
función, visite random_shuffle (ejemplos de STL).
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de