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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Codeforces Round #162 (Div. 2)
下一篇:C++中struct与class的比较

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月30日 09时00分17秒