C++STL 之排列
时间:2022-04-26
本文章向大家介绍C++STL 之排列,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
固然我们可以自己使用递归编写全排列程序,但是既然STL里面已将有了这个功能为什么不直接用呢,下面就写一下直接使用C++ STL生成全排序的程序
函数名:next_permutation
包含头文件:algorithm
函数原型:
template<class BidirectionalIterator>
bool next_permutation(BidirectionalIterator _First, BidirectionalIterator _Last );
template<class BidirectionalIterator, class BinaryPredicate>
bool next_permutation(BidirectionalIterator _First, BidirectionalIterator _Last, BinaryPredicate _Comp );
两个重载函数,第二个带谓词参数_Comp,其中只带两个参数的版本,默认谓词函数为"小于".
返回值:bool类型(默认若当前调用排列到达最大字典序则返回false,同时重新设置该排列为最小字典序,否则返回true,并按照字典递增的顺序输出下一个排列。例如,在字母表中,abcd的下一单词排列为abdc)
所以如果是生成一个数组的全排列,先要对数组按升序排序,然后使用do-while语句循环调用next_permutation函数
1 #include<iostream>
2 #include<algorithm>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 string str;
8 cin>>str;
9 int len=str.length();
10 char *cstr=(char *)str.c_str();
11 cout<<"排列输出如下"<<endl;
12 do
13 {
14 cout<<cstr<<endl;
15 }while(next_permutation(cstr,cstr+len));
16 cout<<"排列之后cstr变为:"<<endl;
17 cout<<cstr;
18 return 0;
19 }
上面是一个没有加排序直接调用nextpermation看一下,不同输入的情况下输出结果的比较
1 #include<iostream>
2 #include<algorithm>
3 #include<string>
4 using namespace std;
5 int main()
6 {
7 string str;
8 cin>>str;
9 int len=str.length();
10 char *cstr=(char *)str.c_str();
11 sort(cstr,cstr+len);
12 cout<<"排列输出如下"<<endl;
13 do
14 {
15 cout<<cstr<<endl;
16 }while(next_permutation(cstr,cstr+len));
17 cout<<"排列之后cstr变为:"<<endl;
18 cout<<cstr;
19 return 0;
20 }
加上排序之后,看看效果
- Table View滑动时报错
- knockout源码分析之执行过程
- knockout源码分析之订阅
- bootstrap源码分析之Carousel
- BOOtstrap源码分析之 tooltip、popover
- 两个链表的第一个公共结点
- mac下Android开发环境搭建
- 三位数的排列组合
- Undefined symbols for architecture i386:"_OBJC_CLASS_$_xx", referenced from: 解决方法
- Xcode5.0使用iOS6.1SDK及模拟器
- 内存泄露
- 深入理解及应用Position
- 数字营销人的年终奖该如何翻倍?这里有5个秘籍
- 处理日期时间NSDate
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在组复制中指定恢复IP地址
- START GROUP_REPLICATION可以将恢复凭据作为参数
- MySQL Shell转储和加载第1部分:演示!
- MySQL Shell转储和加载第2部分:基准测试
- MySQL Shell转储和加载第3部分:加载转储
- Hadoop【单机安装-测试程序WordCount】
- MySQL Shell转储和加载第4部分:转储实例和模式
- 【创建模式】--工厂模式
- 【创建模式】--Singleton
- Mapreduce 历史服务 配置启动查看
- Yarn 的日志聚集功能配置使用
- HDFS 的垃圾回收配置
- 配置SSH无密码登录
- OpenCV学习一《Linux下安装OpenCV》
- InnoDB的数据锁–第1部分“简介”