Visual C++ Standard Library:next_permutation
对一个范围内的数据进行递增式的全排列。
template<class BidirectionalIterator>
bool next_permutation(
BidirectionalIterator _First,
BidirectionalIterator _Last
);
template<class BidirectionalIterator, class BinaryPredicate>
bool next_permutation(
BidirectionalIterator _First,
BidirectionalIterator _Last,
BinaryPredicate _Comp
);
以上是他的两个重载函数接口定义。很类似于sort函数,C++STL中大多数这种比较函数都提供第二个版本,方便使用者自己定义比较函数。
参数说明:
_First:数据的起始位置;_Last:数据终止位置;_Comp:函数指针。
备注:
字典排序,保证了这个函数会生成一个最小递增的排序集合。
相应的,在程序库中还有一个prev_permutation函数。顾名思义,大家自己可以查阅下。
例示程序:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> coll;
for (int i=1;i<=9;++i)
coll.push_back(i);
do
{
for (int i=1;i<=9;++i)
cout<<coll[i];
cout<<endl;
}while (next_permutation(coll.begin(),coll.end()));
return 0;
}
生成了1...9的所有全排列。