**std::next_permutation**

It is used to rearrange the elements in the range [first, last) into the next lexicographically greater permutation. A permutation is each one of the N! possible arrangements the elements can take (where N is the number of elements in the range). Different permutations can be ordered according to how they compare lexicographically to each other.

**Syntax: **

template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last);Parameters:first, last : Bidirectional iterators to the initial and final positions of the sequence. The range used is [first, last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.return value:true :if the function could rearrange the object as a lexicographicaly greater permutation. Otherwise, the function returns false to indicate that the arrangementis not greater than the previous, but the lowest possible (sorted in ascending order).

**Application : **next_permutation is to find next lexicographicaly greater value for given array of values.

Examples:

Input : next permutation of 1 2 3 is Output : 1 3 2 Input : next permutation of 4 6 8 is Output : 4 8 6

`// C++ program to illustrate ` `// next_permutation example ` ` ` `// this header file contains next_permutation function ` `#include <algorithm> ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `int` `main() ` `{ ` ` ` `int` `arr[] = { 1, 2, 3 }; ` ` ` ` ` `sort(arr, arr + 3); ` ` ` ` ` `cout << ` `"The 3! possible permutations with 3 elements:\n"` `; ` ` ` `do` `{ ` ` ` `cout << arr[0] << ` `" "` `<< arr[1] << ` `" "` `<< arr[2] << ` `"\n"` `; ` ` ` `} ` `while` `(next_permutation(arr, arr + 3)); ` ` ` ` ` `cout << ` `"After loop: "` `<< arr[0] << ` `' '` ` ` `<< arr[1] << ` `' '` `<< arr[2] << ` `'\n'` `; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

Output:

The 3! possible permutations with 3 elements: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 After loop: 1 2 3

**std::prev_permutation **

It is used to rearranges the elements in the range [first, last) into the previous lexicographically-ordered permutation. A permutation is each one of the N! possible arrangements the elements can take (where N is the number of elements in the range). Different permutations can be ordered according to how they compare lexicographicaly to each other.

**Syntax : **

template bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last );parameters:first, last : Bidirectional iterators to the initial and final positions of the sequence. The range used is [first, last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.return value:true :if the function could rearrange the object as a lexicographicaly smaller permutation. Otherwise, the function returns false to indicate that the arrangement is not less than the previous, but the largest possible (sorted in descending order).

**Application : ** prev_permutation is to find previous lexicographicaly smaller value for given array of values.

Examples:

Input : prev permutation of 3 2 1 is Output : 3 1 2 Input : prev permutation of 8 6 4 is Output :8 4 6

`// C++ program to illustrate ` `// prev_permutation example ` ` ` `// this header file contains prev_permutation function ` `#include <algorithm> ` ` ` `#include <iostream> ` `using` `namespace` `std; ` `int` `main() ` `{ ` ` ` `int` `arr[] = { 1, 2, 3 }; ` ` ` ` ` `sort(arr, arr + 3); ` ` ` `reverse(arr, arr + 3); ` ` ` ` ` `cout << ` `"The 3! possible permutations with 3 elements:\n"` `; ` ` ` `do` `{ ` ` ` `cout << arr[0] << ` `" "` `<< arr[1] << ` `" "` `<< arr[2] << ` `"\n"` `; ` ` ` `} ` `while` `(prev_permutation(arr, arr + 3)); ` ` ` ` ` `cout << ` `"After loop: "` `<< arr[0] << ` `' '` `<< arr[1] ` ` ` `<< ` `' '` `<< arr[2] << ` `'\n'` `; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

Output:

The 3! possible permutations with 3 elements: 3 2 1 3 1 2 2 3 1 2 1 3 1 3 2 1 2 3 After loop: 3 2 1

Rated as one of the most sought after skills in the industry, own the basics of coding with our **C++ STL** Course and master the very concepts by intense problem-solving.

## Recommended Posts:

- Pointers in C and C++ | Set 1 (Introduction, Arithmetic and Array)
- isupper() and islower() and their application in C++
- fesetround() and fegetround() in C++ and their application
- Queries to insert, delete one occurrence of a number and print the least and most frequent element
- Get first and last elements from Array and Vector in CPP
- Similarities and Differences between Ruby and C++
- Generate an array of given size with equal count and sum of odd and even numbers
- Similarities and Difference between Java and C++
- INT_MAX and INT_MIN in C/C++ and Applications
- Change/add only one character and print '*' exactly 20 times
- Comma in C and C++
- How does "void *" differ in C and C++?
- What are the operators that can be and cannot be overloaded in C++?
- Data type of character constants in C and C++
- Can we use function on left side of an expression in C and C++?
- delete and free() in C++
- ASCII NUL, ASCII 0 ('0') and Numeric literal 0
- Inheritance and friendship
- Type difference of character literals in C and C++
- Result of comma operator as l-value in C and C++

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.