stl全排列next_permutation()与prev_permutation()函数用法

/*对于一组给定的序列你可以从小到大或者从大到小排列,stl中有两个库函数很好用:next_permutation和prev_permutation 但是这里要注意 要在do while循环中写才会将所有你想排列都写出来,在for或者while循环中会将第一组排列丢失*/

/*这里要注意无论是对哪种类型的数据全排列都需要进行排序首先*/

/*这是从大到小的全排列*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cstdlib>

using namespace std;
int a[5];

int main() {
	int cnt = 0;//我们通过计数就可发现是否全排列 
	int b = 5;
	for(int i = 0; i < 5; i++) a[i] = b--;
	while(prev_permutation(a, a+5)){//prev_permutation()函数表示的前一组排列默认从大到小
		for(int i = 0; i < 5; i++) //for循环的原因为了更清楚的看到5个一组放在一起,但是如果是字符串直接cout字符串的名字就可以将一组字符串输出出来。 
		cout << a[i];
		cout << " " << ++cnt << endl;
		cout << endl;
	}
	cout << "while循环总共的排列个数为:" << cnt << endl;
	cnt = 0;
	do{
		for(int i = 0; i < 5; i++) 
		cout << a[i];
		cout << " " << ++cnt << endl;
		cout << endl;
	} while(prev_permutation(a, a+5));
	cout << "do while循环总共的排列个数为:" << cnt << endl;
	return 0;
}
/*这里一定要注意初始化的数组的大小顺序,next_permutation()函数默认从小到大的全排列输出的。*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cstdlib>

using namespace std;
int a[5];

int main() {
	int cnt = 0;//我们通过计数就可发现是否全排列 
	int b = 5;
	for(int i = 0; i < 5; i++) a[i] = b--;
	
/*	while(next_permutation(a, a+5)){//next_permutation表示下一个排列最终完成全排列默认从小到大所以此时第一个值为最大的排列所以该组没有输出全排列 
		for(int i = 0; i < 5; i++) //for循环的原因为了更清楚的看到5个一组放在一起,但是如果是字符串直接cout字符串的名字就可以将一组字符串输出出来。 
		cout << a[i];
		cout << " " << ++cnt << endl;
		cout << endl;
	}
	cout << "while循环总共的排列个数为:" << cnt << endl;//此时输出为0而不是1,while 会把第一组丢失 
*/
	do{
		for(int i = 0; i < 5; i++) 
		cout << a[i];
		cout << " " << ++cnt << endl;
		cout << endl;
	} while(next_permutation(a, a+5));
	cout << "do while循环总共的排列个数为:" << cnt << endl;//这里会输出第一组54321,为什么输出一组而不是所有组呢,因为next_permutation()函数默认输出从小到大的全排列我最开始定义的数组的第一组为54321所以只输出54321,如果将定义的第一组改为12345那么就会全部输出 

	
	return 0;
} /*不论是next_permutation()函数还是prev_permutation()函数括号中的第一个参数表示你想得到的全排列的第一个位置,第二个参数为你想得到的全排列的终止位置*/
/*在对string类型的进行全排列时要首先对其排序否则会丢失数据*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
string s = "zdcv";

int main()
{
	int i = 0;
	int cnt = 0;
	sort(s.begin(),s.end());
		//sort(c, c+4);
		do{
			cout << s;
	
		cout << " " << ++cnt << endl;
	}while(next_permutation(s.begin(), s.end()));
	return 0;
}
/*char类型的和int的一样*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值