c++入门必学库函数 next_permutation

news/2024/4/19 21:25:10/文章来源:https://blog.csdn.net/weixin_52115456/article/details/127626074

一、next_permutation的介绍

next_permutation的意思是下一个排列,与其相对的是prev_permutation,即上一个排列。我们需要使用全排列的时候就可以直接使用这两个函数,方便又快捷

二、next_permutation的基本用法

由于prev_permutation和next_permutation的用法是一样的,下面就值讲解next_permutation的基本用法

next_permutation只能获得上一个排列,如果要获得全排列,那么就需要先对数组进行升序排序

基本定义如下:
next_permutaion(起始地址,末尾地址+1)
next_permutaion(起始地址,末尾地址+1,自定义排序)

可以使用默认的升序排序,也可以使用自定义的排序方法

1、普通数组全排列

普通数组可以通过数组名表示地址,非常容易实现

示例代码:

#include<iostream>
#include<algorithm>//使用 next_permutation()和sort()需要导入的头文件 
using namespace std;
int main(){int a[4]={2,1,4,3};sort(a,a+4);//对数组排序 do{for(int i=0;i<4;i++){//打印排列 cout<<a[i]<<' ';}cout<<endl;}while(next_permutation(a,a+4));//获取下一个排列 
} 

运行结果:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

2、结构体全排列

结构体默认是不能比较大小的,那么就不能使用默认的next_permutation()排列比较函数,需要使用自定义排列比较函数

示例代码:

#include<iostream>
#include<algorithm>//使用 next_permutation()和sort()需要导入的头文件 
using namespace std;struct test{//结构体test int val;
}; bool cmp(test t1,test t2){//自定义的排列 return t1.val<t2.val;
}int main(){test t[4];//结构体数组 t[0].val=1;t[1].val=2;t[2].val=3;t[3].val=4;do{for(int i=0;i<4;i++){//打印排列 cout<<t[i].val<<' ';}cout<<endl;}while(next_permutation(t,t+4,cmp));//获取下一个排列 
} 

运行结果:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

3、vector

vector及string等数据结构不能直接用名字代表地址,只能够使用自带的迭代器begin()、end()实现全排列

示例代码:

#include<iostream>
#include<vector> //使用vector需要导入的头文件 
#include<algorithm>//使用 next_permutation()和sort()需要导入的头文件 
using namespace std;int main(){vector<int> v;//定义一个int型的vector v.push_back(1);//在尾部插入数据1 v.push_back(2);v.push_back(3);v.push_back(4);do{for(int i=0;i<v.size();i++){//打印排列 cout<<v[i]<<' ';}cout<<endl;}while(next_permutation(v.begin(),v.end()));//获取下一个排列 
} 

运行结果:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

同样地,prev_permutation拥有同样的用法,大家可以动手尝试一下

学完next_permutation的这些基本用法就足够使用了,进阶的可以搭配其它的数据结构进行使用

加油!!兄弟萌

点个赞呗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410188.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【百度地图】百度地图的使用方法 和 在vue中如何使用百度地图(超详细)

【百度地图】百度地图的使用方法 和 在vue中如何使用百度地图&#xff08;超详细&#xff09; 1- 介绍 百度地图功能强大&#xff0c;本篇文章只是对百度地图JavaScript API 进行一个介绍~ 官方网址 百度地图开放平台LBS&#xff1a;LocationBusinessServer 基于定义位置的商…

Spark 离线开发框架设计与实现

一、背景 随着 Spark 以及其社区的不断发展&#xff0c;Spark 本身技术也在不断成熟&#xff0c;Spark 在技术架构和性能上的优势越来越明显&#xff0c;目前大多数公司在大数据处理中都倾向使用 Spark。Spark 支持多种语言的开发&#xff0c;如 Scala、Java、Sql、Python 等。…

Matlab神经网络函数newff()新旧用法差异

在Matlab R2010a版中,如果要创建一个具有两个隐含层、且神经元数分别为5、3的前向BP网络,使用旧的语法可以这样写:net1 = newff(minmax(P), [5 3 1]); 注意minmax()函数的使用,还有对输出层神经元数(1)的指定。当然也可以采用新的语法,更简洁(请留意差异):net2 = new…

形态分类行为中的气泡佯谬

“假设光归根结底是波&#xff0c;只是给我们以粒子的印象&#xff0c;因为粒子吸收光波的能量是以离散的包的方式。波从源头传播出去像一个越来越大正在膨胀的气泡&#xff0c;到达一个原子时&#xff0c;气泡破裂&#xff0c;波坍缩并把所有的能量集中在一个地方&#xff0c;…

【数字式时间继电器】TR-23 DC110V

系列型号 TR-20数字式时间继电器&#xff1b;TR-21数字式时间继电器&#xff1b; TR-22数字式时间继电器&#xff1b;TR-23数字式时间继电器&#xff1b; TR-24数字式时间继电器&#xff1b;TR-25数字式时间继电器&#xff1b; TR-20D数字式时间继电器&#xff1b;TR-21D数字式…

无刷电机控制基础(3)——FOC矢量控制入门

本节我们讲一些无刷电机FOC矢量控制的入门知识。 1&#xff09;FOC矢量控制的作用 我们前两节讲的无刷电机&#xff08;BLDC&#xff09;&#xff0c;是最简单的结构&#xff0c;当转子匀速转动时&#xff0c;定子内产生的反电动势是梯形波&#xff1b;在驱动无刷电机转动时&a…

你不知道的JavaScript-----强制类型转换

目录 值类型转换 抽象值的操作 JSON 字符串化 ToNumber&#xff1a; 非数字值到数字值 Number(value) ToBoolean: 转换为布尔类型 Boolean(value) 强制类型转换 字符串和数字之间的显式强制类型转换 奇特的~运算符 字位截除 显式解析数字字符串 显式转换为布尔值 隐…

Mybatis查询返回结果类型专题

文章目录一、返回一条信息二、返回List集合三、返回Map集合四、返回多个Map集合五、返回List集合一、返回一条信息 Student selectById(Long id); 不再赘述 二、返回List集合 List< Student> selectAll(); 不再赘述 三、返回Map集合 用map集合去接收返回来的结果 字…

Python-- list(列表)的使用

目录 1.合并两个有序序列构成一个有序列表 2.编写程序判断列表是否为升序 3.输入一个十进制转换为二进制输出 4.将列表中的前p个元素到尾列表 1.合并两个有序序列构成一个有序列表 代码如下&#xff1a; list1 list(eval(input("请输入有序列表list1:"))) list…

【飞桨PaddleSpeech语音技术课程】— 一句话语音合成全流程实践

(以下内容搬运自飞桨PaddleSpeech语音技术课程&#xff0c;点击链接可直接运行源码) 一句话语音合成全流程实践 点击播放视频 1 声音克隆介绍 & 语音合成基本概念回顾 语音合成&#xff08;Speech Sysnthesis&#xff09;&#xff0c;又称文本转语音&#xff08;Text-t…

Web前端:angular对比React——选择2022年Web开发的理想框架

Javascript世界中的框架列表不断增长和变化&#xff0c;但有两个框架从其他框架中脱颖而出。Angular和React是市场上最受欢迎的框架之一&#xff0c;代表了创建web应用程序和网站的两种不同方法。 试图利用web开发框架的开发人员和企业家现在正在分析Angular和React——这两种方…

软考下午题第2题——E-R图 UML图 逻辑结构设计-示题与解析

下午的第二题主要是找【属性】【主键】【外键】【候选键】之间的关系。 候选键&#xff1a;属性或者是属性组合&#xff0c;其值能够唯一地标识一个元组 主键&#xff1a;在一个关系中可能有多个候选键&#xff0c;从中选择一个作为主键 外键&#xff1a;如果一个关系中的属性或…

微机期末复习指导

目录 位扩展定义字扩展定义1、线选法定义优点缺点2、部分译码法定义3、全译码法定义优点缺点⭐字位扩展定义问题

高压放大器基于声纹影法的声可视化实验的应用

实验名称&#xff1a;高压功率放大器基于声纹影法的声可视化实验应用 研究方向&#xff1a;声学超表面声学隐身斗篷 实验内容&#xff1a;利用声纹影平台&#xff0c;对所设计的声隐身斗篷进行出射平面波的测量&#xff0c;采用安泰放大器来驱动平面超声波阵列&#xff0c;可以…

CSS3专题-[上篇]:过渡、2D转换、动画

目录 CSS3&#xff1a;前置特性 CSS3&#xff1a;盒子模型 CSS3&#xff1a;图片滤镜与模糊处理 blur()&#xff1a;高斯模糊 CSS3&#xff1a;计算盒子宽度calc()函数 CSS3&#xff1a;过渡效果 transition属性 2D转换&#xff1a;transform属性 translate()方法 * t…

Mybatis MappedStatement

MappedStatement MappedStatement 类是 Mybatis 框架的核心类之一&#xff0c;它存储了一个 sql 对应的所有信息 Mybatis 通过解析 XML 和 mapper 接口上的注解&#xff0c;生成 sql 对应的 MappedStatement 实例&#xff0c;并放入 SqlSessionTemplate 中 configuration 类属…

凭此五点 这款信创传输系统解决了传输的迫切需求

早在20世纪80年代&#xff0c;我国政府IT底层基础软硬件的自主创新提出了相关要求&#xff0c;但受制于国外巨头垄断关键技术&#xff0c;诸多系统性风险与安全隐患无力解决。自2018年以来&#xff0c;在中兴和华为等公司供应链危机的催化下&#xff0c;信创产业进入快速发展期…

Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器

Verilog设计参数化的译码器与编码器&#xff0c;以及设计4位格雷码计数器 使用Quartusmodelsim完成设计 文章目录Verilog设计参数化的译码器与编码器&#xff0c;以及设计4位格雷码计数器1. 参数化的译码器分析代码实现Testbench结果2. 参数化的编码器分析代码Testbench结果3.…

Redis 主从架构数据同步

Redis 主从架构图 主从架构能够很大提升并发能力&#xff0c;master 节点负责写数据&#xff0c;slave 节点负责读数据&#xff0c;这样就涉及到 master 和 slave 数据同步的一个过程 一起来看一下数据是如何同步的吧 redis 的主从同步机制可以确保 master 和 slave 之间的数据…

Kubernetes 架构介绍

目录 一、Kubernetes 架构 1、Kubernetes 是什么&#xff1f; 2、Kubernetes 架构 3、Master 节点 4、Node 节点 5、推荐Add-ons 6、Kubeadm 7、查看组件运行状态 8、Kubeadm 容器化组件 二、namespace 1、命名空间 — namespace 2、常用命名空间命令 1. 查看存在哪…