STL <algorithm>中有两个函数next_permutation和prev_permutation。
next_permutation声明为:
template< class BidirIt > bool next_permutation( BidirIt first, BidirIt last ); template< class BidirIt, class Compare > bool next_permutation( BidirIt first, BidirIt last, Compare comp );
first,last为要重排的元素范围,comp为比较函数对象。
若新排列按字典序大于旧者则为 true 。若抵达最后重排并重置范围为首个排列则为 false 。
prev_permutation声明为:
template< class BidirIt > bool prev_permutation( BidirIt first, BidirIt last); template< class BidirIt, class Compare > bool prev_permutation( BidirIt first, BidirIt last, Compare comp);
first,last为要重排的元素范围,comp为比较函数对象。
若新排列按字典序前趋旧排列则为 true 。若抵达首个排列并重置范围为最末排列则为 false。
使用示例:
#include <iostream> #include <algorithm> using namespace std; int main() { char str[4] = "abc"; do { for(int i=0; i<3; i++) cout << str[i]; cout << endl; } while(next_permutation(str, str + 3)); return 0; }
运行结果: