
Module: Standard C++ Library Library: Algorithms
Function
Algorithm that randomly shuffles elements of a collection
#include <algorithm>
namespace std {
template <class RandomAccessIterator>
void random_shuffle(RandomAccessIterator start,
RandomAccessIterator finish);
template <class RandomAccessIterator,
class RandomNumberGenerator>
void random_shuffle(RandomAccessIterator start,
RandomAccessIterator finish,
RandomNumberGenerator& rand);
}
The random_shuffle() algorithm shuffles the elements in the range [start, finish) with uniform distribution. random_shuffle() can take a particular random number generating function object rand (where rand takes a positive argument n of type convertible from std::iterator_traits<RandomAccessIterator>::difference_type) and returns a randomly chosen value between 0 and n - 1.
In the random_shuffle() algorithm, (finish - start) - 1 swaps are done.
//
// rndshufl.cpp
//
#include <algorithm> // for random_shuffle
#include <iostream> // for cout, endl
#include <iterator> // for ostream_iterator
#include <string> // for string
int main ()
{
// Create a string of doubles (unusual? maybe,
// but why not...)
typedef std::basic_string<double,
std::char_traits<double>,
std::allocator<double> >
Bizarre;
// Initialize a Bizarre with an array of values.
const Bizarre::value_type a[] = { 1, 2, 3, 4, 5,
6, 7, 8, 9, 10 };
Bizarre b (a + 0, a + sizeof a / sizeof *a);
typedef std::ostream_iterator<double, char,
std::char_traits<char> >
Iter;
// Suppress decimal point in output.
std::cout.precision (0);
// Print out elements in original (sorted) order.
std::cout << "Elements before random_shuffle: \n ";
std::copy (b.begin (), b.end (), Iter (std::cout," "));
// Mix them up with random_shuffle.
std::random_shuffle (b.begin (), b.end ());
// Print out the mixed up elements.
std::cout << "\n\nElements after random_shuffle: \n ";
std::copy (b.begin (), b.end (), Iter (std::cout, " "));
std::cout << std::endl;
return 0;
}
Program Output:
Elements before random_shuffle:
1 2 3 4 5 6 7 8 9 10
Elements after random_shuffle:
9 8 7 6 2 3 1 4 5 10
ISO/IEC 14882:1998 -- International Standard for Information Systems --Programming Language C++, Section 25.2.11
Copyright (c) 1994-2006 Rogue Wave Software, a Quovadx Division.
Licensed under the Apache License, Version 2.0.
Contact Rogue Wave about documentation or support issues. You can also seek help from other developers through the Apache stdcxx community (see below).