/* * Reverse and Rotate * */ template<class Bi> void reverse(Bi first, Bi last); template<class Bi, class Out> Out reverse_copy(Bi first, Bi last, Out res); template<class For> void rotate(For first, For middle, For last); template<class For, class Out> Out rotate_copy(For first, For middle, For last, Out res); template<class Ran> void random_shuffle(Ran first, Ran last); template<class Ran, class Gen> void random_shuffle(Ran first, Ran last, Gen& g); /* * Usage * */ void f() { string v[] = { "Frog", "and","Peach" }; reverse(v,v+3); // Peach and Frog rotate(v,v+1,v+3); // and Frog Peach } void f(deque<Card>& dc) { Urand r(52); random_shuffle(dc.begin(),dc.end(),r); // ... }