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

相关文章

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

Springboot中Jackson用法详解

《Springboot中Jackson用法详解》Springboot自带默认json解析Jackson,可以在不引入其他json解析包情况下,解析json字段,下面我们就来聊聊Springboot中J... 目录前言Jackson用法将对象解析为json字符串将json解析为对象将json文件转换为json

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87