std::next_permutation
来自cppreference.com
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
Defined in header <algorithm>
|
||
template< class BidirIt > bool next_permutation( BidirIt first, BidirIt last ); |
(1) | |
template< class BidirIt, class Compare > bool next_permutation( BidirIt first, BidirIt last, Compare comp ); |
(2) | |
變換的範圍內
[first, last)
進入下一置換從該組的所有字典順序排列的排列相對於operator<
或comp
。返回true如果這樣的排列存在,否則將到第一個置換(如果由std::sort(first, last)
),並返回false.Original:
Transforms the range
[first, last)
into the next permutation from the set of all permutations that are lexicographically ordered with respect to operator<
or comp
. Returns true if such permutation exists, otherwise transforms the range into the first permutation (as if by std::sort(first, last)
) and returns false.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
目錄 |
[编辑] 參數
first, last | - | 元素的範圍內的重排
Original: the range of elements to permute The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. | |||||||||
comp | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following:
The signature does not need to have const &, but the function must not modify the objects passed to it. | |||||||||
Type requirements | |||||||||||
-BidirIt must meet the requirements of ValueSwappable and BidirectionalIterator .
|
[编辑] 返回值
true如果新的排列是大於舊字典。 false如果最後的排列,達到的範圍複位到第一排列.
Original:
true if the new permutation is lexicographically greater than the old. false if the last permutation was reached and the range was reset to the first permutation.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[编辑] 複雜性
在最N/2掉期,N = std::distance(first, last).
Original:
At most N/2 swaps, where N = std::distance(first, last).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[编辑] 可能的實現
template<class BidirIt> bool next_permutation(BidirIt first, BidirIt last) { if (first == last) return false; BidirIt i = last; if (first == --i) return false; while (1) { BidirIt i1, i2; i1 = i; if (*--i < *i1) { i2 = last; while (!(*i < *--i2)) ; std::iter_swap(i, i2); std::reverse(i1, last); return true; } if (i == first) { std::reverse(first, last); return false; } } } |
[编辑] 為例
下面的代碼列印「ABA」字元串的所有排列
Original:
The following code prints all three permutations of the string "aba"
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <algorithm> #include <string> #include <iostream> int main() { std::string s = "aba"; std::sort(s.begin(), s.end()); do { std::cout << s << '\n'; } while(std::next_permutation(s.begin(), s.end())); }
Output:
aab aba baa
[编辑] 另請參閱
(C++11) |
determines if a sequence is a permutation of another sequence (函數模板) |
generates the next smaller lexicographic permutation of a range of elements (函數模板) |