Knuth shuffle: Difference between revisions
Content added Content deleted
imported>Arakov |
imported>SamTheTomato (→C++: Added empty vector check to prevent unsigned overflow.) |
||
Line 1,404: | Line 1,404: | ||
=={{header|C++}}== |
=={{header|C++}}== |
||
'''Compiler:''' [[g++]] (version 4.3.2 20081105 (Red Hat 4.3.2-7)) |
'''Compiler:''' [[g++]] (version 4.3.2 20081105 (Red Hat 4.3.2-7)) |
||
<syntaxhighlight lang="cpp">#include <cstdlib> |
<syntaxhighlight lang="cpp" line="1">#include <cstdlib> |
||
#include <algorithm> |
#include <algorithm> |
||
#include <iterator> |
#include <iterator> |
||
Line 1,410: | Line 1,410: | ||
template<typename RandomAccessIterator> |
template<typename RandomAccessIterator> |
||
void knuthShuffle(RandomAccessIterator begin, RandomAccessIterator end) { |
void knuthShuffle(RandomAccessIterator begin, RandomAccessIterator end) { |
||
if(begin == end) { |
|||
return; |
|||
} |
|||
for(unsigned int n = end - begin - 1; n >= 1; --n) { |
for(unsigned int n = end - begin - 1; n >= 1; --n) { |
||
unsigned int k = rand() % (n + 1); |
unsigned int k = rand() % (n + 1); |