Usare la funzione STL random_shuffle in Visual C++
Questo articolo descrive come usare la random_shuffle
funzione STL (Standard Template Library) in Visual C++.
Versione originale del prodotto: Visual C++
Numero KB originale: 156994
Intestazione obbligatoria
<algorithm>
Prototipo
template<class RandomAccessIterator, class Predicate> inline
void random_shuffle(RandomAccessIterator first,
RandomAccessIterator last,
Predicate pred)
Nota
I nomi di classe/parametro nel prototipo non corrispondono alla versione originale nel file di intestazione. Sono stati modificati per migliorare la leggibilità.
Descrizione
L'algoritmo random_shuffle
rimescola gli elementi di una sequenza (first.. ultimo) in ordine casuale.
La versione del predicato usa la funzione pred per generare gli indici degli elementi da scambiare. Il pred deve essere un oggetto funzione che accetta un parametro n e restituisce un numero casuale integrale nell'intervallo da 0 a (n - 1).
La versione del predicato di random_shuffle
usa operator=
per eseguire scambi.
Codice di esempio
//////////////////////////////////////////////////////////////////////
// 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;
}
Output del programma:
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 }
Riferimenti
Per altre informazioni sulla funzione, vedere random_shuffle (esempi STL).For more information about the random_shuffle
function, visit random_shuffle (STL Samples).
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per