std::random_shuffle, std::shuffle
Da 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. |
Definido no cabeçalho <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) | (até C++11) (desde C++11) |
template< class RandomIt, class URNG > void shuffle( RandomIt first, RandomIt last, URNG&& g ); |
(3) | (desde C++11) |
Reordena os elementos no intervalo dado
[first, last)
tais que cada permutação possível destes elementos tem a mesma probabilidade de aparecimento.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)
O gerador de números aleatórios é definida pela implementação, mas o std::rand função é freqüentemente usado.
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)
O gerador de números aleatórios é o
r
objeto de função. 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)
O gerador de números aleatórios é o
g
objeto de função.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.
Índice |
[editar] Parâmetros
first, last | - | a gama de elementos para embaralhar aleatoriamente
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 | - | objeto de função retornar um valor escolhido aleatoriamente do tipo conversível para
iterator_traits<RandomIt>::difference_type no intervalo [0, n) se invocada como r(n) 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 | - | objeto de função retornar um valor escolhido aleatoriamente de
URNG::result_type tipo no intervalo [g.min (), g.max ()] se invocado como g() (por exemplo, qualquer um dos uniformes geradores de números aleatórios de <random> ) 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 .
|
[editar] Valor de retorno
(Nenhum)
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.
[editar] Complexidade
linear, em que a distância entre
first
e 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.
[editar] Possível implementação
First version |
---|
template<class RandomIt, class RandomFunc> void random_shuffle(RandomIt first, RandomIt last, RandomFunc&& r) { typename std::iterator_traits<RandomIt>::difference_type i, n; n = last - first; for (i = n-1; i > 0; --i) { using std::swap; swap(first[i], first[r(i+1)]); } } |
Second version |
template<class RandomIt, class UniformRandomNumberGenerator> void shuffle(RandomIt first, RandomIt last, UniformRandomNumberGenerator&& g) { typedef typename std::iterator_traits<RandomIt>::difference_type diff_t; typedef typename std::make_unsigned<diff_t>::type udiff_t; typedef typename std::uniform_int_distribution<udiff_t> distr_t; typedef typename distr_t::param_type param_t; distr_t D; diff_t n = last - first; for (diff_t i = n-1; i > 0; --i) { using std::swap; swap(first[i], first[D(g, param_t(0, i))]); } } |
[editar] Exemplo
O código a seguir aleatoriamente embaralha os inteiros 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"; }
Saída possível:
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
[editar] Veja também
generates the next greater lexicographic permutation of a range of elements (modelo de função) | |
generates the next smaller lexicographic permutation of a range of elements (modelo de função) |