std::random_shuffle, std::shuffle
Aus cppreference.com
![]() | This page has been machine-translated from the English version of the wiki using Google Translate. The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
definiert in Header <algorithm> | ||
template<class RandomIt > void random_shuffle( RandomIt first, RandomIt last ); | (1) | |
template<class RandomIt, class RandomFunc > void random_shuffle( RandomIt first, RandomIt last, RandomFunc& r ); | (2) | (bis C + +11) (seit C++11) |
template<class RandomIt, class URNG > void shuffle( RandomIt first, RandomIt last, URNG&& g ); | (3) | (seit C++11) |
Ordnet die Elemente in der gegebenen Bereich
[first, last)
so dass jede mögliche Permutation dieser Elemente gleiche Wahrscheinlichkeit des Auftretens hat .Original:
Reorders the elements in the given range
[first, last)
such that each possible permutation of those elements has equal probability of appearance.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
1)
Der Zufallsgenerator ist die Implementierung definiert, aber die Funktion std::rand wird häufig verwendet .
Original:
The random number generator is implementation-defined, but the function std::rand is often used.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
2)
Der Zufallsgenerator ist die Funktion Objekt
r
. Original:
The random number generator is the function object
r
. The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
3)
Der Zufallsgenerator ist die Funktion Objekt
g
.Original:
The random number generator is the function object
g
.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Inhaltsverzeichnis |
[Bearbeiten]Parameter
first, last | - | das Spektrum der Elemente Zufallswiedergabe Original: the range of elements to shuffle randomly The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
r | - | Funktionsobjekt Zurückführen eines zufällig ausgewählten Wertes vom Typ umwandelbar iterator_traits<RandomIt>::difference_type im Intervall [0, n), wenn als r(n) aufgerufen Original: function object returning a randomly chosen value of type convertible to iterator_traits<RandomIt>::difference_type in the interval [0,n) if invoked as r(n) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
g | - | Funktionsobjekt Zurückführen eines zufällig ausgewählten Wertes vom Typ URNG::result_type im Intervall [g.min (), g.max ()] falls als g() (zB einem der einheitliche Zufallszahlengeneratoren aus <random> ) aufgerufen Original: function object returning a randomly chosen value of type URNG::result_type in the interval [g.min(), g.max()] if invoked as g() (e.g. any of the uniform random number generators from <random> ) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Type requirements | ||
-RandomIt must meet the requirements of ValueSwappable and RandomAccessIterator . | ||
-URNG must meet the requirements of UniformRandomNumberGenerator . |
[Bearbeiten]Rückgabewert
(None)
Original:
(none)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[Bearbeiten]Komplexität
linear im Abstand
first
und last
Original:
linear in the distance between
first
and last
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[Bearbeiten]Mögliche Implementierung
First version |
---|
template<class RandomIt, class RandomFunc>void random_shuffle(RandomIt first, RandomIt last, RandomFunc&& r){typenamestd::iterator_traits<RandomIt>::difference_type i, n; n = last - first;for(i = n-1; i >0;--i){usingstd::swap; swap(first[i], first[r(i+1)]);}} |
Second version |
template<class RandomIt, class UniformRandomNumberGenerator>void shuffle(RandomIt first, RandomIt last, UniformRandomNumberGenerator&& g){typedeftypenamestd::iterator_traits<RandomIt>::difference_type diff_t;typedeftypenamestd::make_unsigned<diff_t>::type udiff_t;typedeftypenamestd::uniform_int_distribution<udiff_t> distr_t;typedeftypename distr_t::param_type param_t; distr_t D; diff_t n = last - first;for(diff_t i = n-1; i >0;--i){usingstd::swap; swap(first[i], first[D(g, param_t(0, i))]);}} |
[Bearbeiten]Beispiel
Der folgende Code zufällig mischt die Zahlen 1 .. 10:
Original:
The following code randomly shuffles the integers 1..10:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <random>#include <algorithm>#include <iterator>#include <iostream> int main(){std::vector<int> v ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; std::random_device rd;std::mt19937 g(rd()); std::shuffle(v.begin(), v.end(), g); copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));std::cout<<"\n";}
Mögliche Ausgang:
Original:
Possible output:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
8 6 10 4 2 3 7 1 9 5
[Bearbeiten]Siehe auch
generates the next greater lexicographic permutation of a range of elements (Funktions-Template) | |
generates the next smaller lexicographic permutation of a range of elements (Funktions-Template) |