Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Sie die random_shuffle
StL-Funktion (Standard Template Library) in Visual C++ verwenden.
Originalproduktversion: Visual C++
Ursprüngliche KB-Nummer: 156994
Erforderlicher Header
<algorithm>
Prototyp
template<class RandomAccessIterator, class Predicate> inline
void random_shuffle(RandomAccessIterator first,
RandomAccessIterator last,
Predicate pred)
Notiz
Die Klassen-/Parameternamen im Prototyp stimmen nicht mit der ursprünglichen Version in der Headerdatei überein. Sie wurden geändert, um die Lesbarkeit zu verbessern.
Beschreibung
Der random_shuffle
Algorithmus gliedert die Elemente einer Sequenz (zuerst. zuletzt) in einer zufälligen Reihenfolge.
Die Prädikatversion verwendet die pred-Funktion, um die Indizes der zu tauschenden Elemente zu generieren. Das prädierte Objekt muss ein Funktionsobjekt sein, das einen Parameter n verwendet und eine integrale Zufallszahl im Bereich 0 bis (n - 1) zurückgibt.
Die Prädikatversion der Verwendung operator=
zum Ausführen von random_shuffle
Swaps.
Beispielcode
//////////////////////////////////////////////////////////////////////
// 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;
}
Programmausgabe:
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
Weitere Informationen zur random_shuffle
Funktion finden Sie unter random_shuffle (STL Samples).