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;
}

运行结果:

12-17 22:29