next_permutation 的使用
发布日期:2021-06-30 15:14:33
浏览次数:2
分类:技术文章
本文共 1516 字,大约阅读时间需要 5 分钟。
重排区间中的元素,使得原序列变成按字典次序的下一个序列。其中的“下一个”的定义可以由用户自己定制。
加载头文件:
#include<iostream>
函数原型:
template<class BidirectionalIterator>
bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last ); template<class BidirectionalIterator, class BinaryPredicate> bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last, BinaryPredicate _Comp );传入参数说明:
_First 要改变的第一个序列的起始位置
_Last 要改变的第一个序列的结束位置
_Comp 自定义的大小关系函数对象,根据两元素的大小返回true或者false
函数返回值:
若字典次序的下一个序列存在且已经替换排序成功则返回true,否则返回false,同时排序方案被转换成按字典次序最小的排序。
对于第二个重载函数的第三个参数,默认比较顺序为小于。如果找到下一个序列,则返回真,否则返回假。
说明:
默认的大小关系由小于运算符定义,区间中的元素必须是能够进行大小判断的。该算法的时间复杂性事线性的,最多进行(_Last-_First)/2次交换。
下面给出例子学习next_permutation的使用:序列{a, d, c, e, b}的下一个序列是什么呢?请利用前面的分析推出答案,并用代码验证。
我这里分别用数组和vector来表示序列,用next_permutation得到下一个序列.
#include#include #include using namespace std;void TestArray(){ char chs[] = { 'a', 'd', 'c', 'e', 'b' }; int count = sizeof(chs) / sizeof(char); next_permutation(chs, chs + count); cout << "TestArray:" << endl; for (int i = 0; i < count; i++) cout << chs[i] << " "; cout << endl;}void TestVector(){ char chs[] = { 'a', 'd', 'c', 'e', 'b' }; int count = sizeof(chs) / sizeof(char); vector vChs(chs, chs + count); next_permutation(vChs.begin(), vChs.end()); cout << "TestArray:" << endl; vector ::iterator itr; for (itr = vChs.begin(); itr != vChs.end(); itr++) cout << *itr << " "; cout << endl;}int main(){ TestArray(); cout << endl; TestVector(); cout << endl; return 0;}
转载地址:https://jianzhuwang.blog.csdn.net/article/details/45094621 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月30日 09时00分17秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
四线触摸屏原理
2019-04-30
C/C++如何返回一个数组/指针
2019-04-30
腾讯AI语音识别API踩坑记录
2019-04-30
YbtOJ——递推算法【例题4】传球游戏
2019-04-30
安装openrave 0.9的各种依赖包
2019-05-01
trajopt代码使用
2019-05-01
kpm代码使用细节
2019-05-01
@FeignClient注解的重复名称解决
2019-05-01
java.net.BindException: 无法指定被请求的地址
2019-05-01
scala list
2019-05-01
k8s设置阿里云仓库
2019-05-01
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
svn 没有作者信息) | (没有时间信息
2019-05-01
shell dirname basename
2019-05-01
未来已至,5G加持下的云游戏将走向何方?
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
Android生命周期
2019-05-01
Android进度条自定义——类似ProgressDialog效果的Dialog
2019-05-01
Android 之 ContentProvider 与 ContentResolver
2019-05-01