Utiliser la fonction STL random_shuffle dans Visual C++
Cet article explique comment utiliser la random_shuffle
fonction STL (Standard Template Library) dans Visual C++.
Version d’origine du produit : Visual C++
Numéro de la base de connaissances d’origine : 156994
En-tête obligatoire
<algorithm>
Prototype
template<class RandomAccessIterator, class Predicate> inline
void random_shuffle(RandomAccessIterator first,
RandomAccessIterator last,
Predicate pred)
Remarque
Les noms de classe/paramètre dans le prototype ne correspondent pas à la version d’origine dans le fichier d’en-tête. Ils ont été modifiés pour améliorer la lisibilité.
Description
L’algorithme random_shuffle
mélange les éléments d’une séquence (d’abord. last) dans un ordre aléatoire.
La version du prédicat utilise la fonction pred pour générer les index des éléments à permuter. Le pred doit être un objet de fonction qui prend un paramètre n et retourne un nombre aléatoire intégral dans la plage de 0 à (n - 1).
La version de prédicat de random_shuffle
utilise operator=
pour effectuer des échanges.
Exemple de code
//////////////////////////////////////////////////////////////////////
// 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;
}
Sortie du programme :
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 }
References
Pour plus d’informations sur la random_shuffle
fonction, consultez random_shuffle (exemples STL).
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour