Man Page random_shuffle.3

                       Standard C++ Library
             Copyright 1998, Rogue Wave Software, Inc.



      - Randomly shuffles elements of a collection.


     #include <algorithm>
     template <class RandomAccessIterator>
     void random_shuffle (RandomAccessIterator first,
                          RandomAccessIterator last);

     template <class RandomAccessIterator,
              class RandomNumberGenerator>
     void random_shuffle (RandomAccessIterator first,
                          RandomAccessIterator last,
                          RandomNumberGenerator& rand);


     The random_shuffle algorithm shuffles the  elements  in  the
     range    [first,    last)    with    uniform   distribution.
     random_shuffle can take a particular random number  generat-
     ing  function object rand (where rand takes a positive argu-
     ment n of distance type  of  the  RandomAccessIterator)  and
     returns a randomly chosen value between 0 and n - 1.


     In the random_shuffle algorithm, (last - first) -1 swaps are


     // rndshufl.cpp
      #include <algorithm>
      #include <vector>
      #include <iostream>

     using namespace std;
     int main()
        //Initialize a vector with an array of ints
       int arr[10] = {1,2,3,4,5,6,7,8,9,10};
       vector<int> v(arr, arr+10);
        //Print out elements in original (sorted) order
       cout << "Elements before random_shuffle: " << endl
             << "     ";
            ostream_iterator<int,char>(cout," "));
       cout << endl << endl;
        //Mix them up with random_shuffle
        random_shuffle(v.begin(), v.end());
        //Print out the mixed up elements
       cout << "Elements after random_shuffle: "  <<  endl  <<  "
            ostream_iterator<int,char>(cout," "));
       cout << endl;

       return 0;

     Program Output

     Elements before random_shuffle:
         1 2 3 4 5 6 7 8 9 10
     Elements after random_shuffle:
         7 9 10 3 2 5 4 8 1 6


     If your compiler does not support default  template  parame-
     ters, you always need to supply the Allocator template argu-
     ment. For instance, you need to write:

     vector<int, allocator<int> >

     instead of:


     If your compiler does not support namespaces,  then  you  do
     not need the using declaration for std.