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

2024-01-11 06:38

本文主要是介绍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的一样*/


这篇关于stl全排列next_permutation()与prev_permutation()函数用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593478

相关文章

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错