1: //next_permutation1a.cpp 3: #include <iostream> 4: #include <vector> 5: #include <algorithm> 6: #include <iomanip> 7: using namespace std; 9: int main() 10: { 11: cout << "\nThis program illustrates the use of the STL " 12: "next_permutation() algorithm\n(default version) to generate " 13: "all permutations of a vector of integers,\nin order, and also " 14: "to demonstrate what happens to the return value of the " 15: "\nalgorithm when the \"end\" of a permutation sequence is " 16: "reached and we then\n\"roll over\" to begin a new sequence."; 17: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 19: cout << "\nFirst, we declare a vector of 3 integers and show all of " 20: "its permuations."; 21: int a1[] = {1, 2, 3}; 22: vector<int> v1(a1, a1+3); 23: cout << "\nHere are the contents of the vector before any " 24: "permutations are generated:\n"; 25: for (vector<int>::size_type i=0; i<v1.size(); i++) 26: cout << v1.at(i) << " "; 27: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 29: cout << "\nAnd here are the contents of the vector as each " 30: "permutation is generated:\n"; 31: while (next_permutation(v1.begin(), v1.end())) 32: { 33: for (vector<int>::size_type i=0; i<v1.size(); i++) 34: cout << v1.at(i) << " "; 35: cout << endl; 36: } 37: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 39: cout << "\nFinally (for this vector), here are its contents" 40: "\nafter all permutations have been generated:\n"; 41: for (vector<int>::size_type i=0; i<v1.size(); i++) 42: cout << v1.at(i) << " "; 43: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 45: int a2[] = {1, 3, 4, 2, 5}; 46: vector<int> v2(a2, a2+5); 47: cout << "\nHere are the contents of a second vector of 5 integers " 48: "\nbefore any permutations are generated:\n"; 49: for (vector<int>::size_type i=0; i<v2.size(); i++) 50: cout << v2.at(i) << " "; 51: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 53: cout << "\nNow we show the return value of the algorithm, and the " 54: "contents of\nthis vector, after each of 6 permutations of just " 55: "the middle 3 values."; 56: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 57: for (int i=1; i<=6; i++) 58: { 59: cout << "Return value: " << boolalpha 60: << next_permutation(v2.begin()+1, v2.end()-1) << "\t"; 61: cout << "Vector contents: "; 62: for (vector<int>::size_type i=0; i<v2.size(); i++) 63: cout << v2.at(i) << " "; 64: cout << endl; 65: } 66: cout << "Press Enter to continue ... "; cin.ignore(80, '\n'); 67: }