对于C风格数组 ( int arr[n] ),用法:
next_permutation( arr, arr+n )
对于C++ STL vector容器( vector<int> vec ),用法:
next_permutation( vec.begin(), vec.end() )
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int n;
//next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列
//next_permutation()在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数。
void myPrint(int n)
{
cout << n << " ";
return;
}
int main()
{
scanf_s("%d", &n);
vector<int>v;
for (int i = 1; i <= n; i++)
v.push_back(i);
do
{
for_each(v.begin(), v.end(), myPrint);
cout << endl;
} while (next_permutation(v.begin(), v.end()));
return 0;
}
注意一:当使用 next_permutation 函数后,数组已经变成下一个排列;
注意二:next_permutation 函数不会自动从 第一个排列 开始,而是从 当前序 开始,因此若要得到所有全排列,应事先将数组排好序(升序)