【STL】next_permutation函数用法

18 篇文章 0 订阅

(1)如果给你组数:1 2 3 4 5 

(2)如果给出的条件是让你从小到大求出下一个排列,当然就是:1 2 3 5 4

(3)如果再下一个就是:1 2 4 3 5  ;再下一个是:1 2 4 5 3

(4)如果问你求的是下n个排列是什么?你该怎么快速求出呢???

当然,在(2)中的答案可以从(1)中的倒数第一位与第二位比较,如果倒数第一位比第二位大,那么交换位置,然后下一个排列就是交换后的了,即:1 2 3 5 4;

然后依次下去用这种思想可以求出下面的排列……

但是你想想每位都要比较判断,如果相等又往前推,依次这样的话,判断语句又多,代码也不会短,你不烦我还烦呢…… ^_^ 嘿嘿,想偷懒就得想个法子解决问题……

所以懒也是有原因的……next_permutation出场的时候就到了……

 

 

使用方法:next_permutation(数组头地址,数组尾地址);若下一个排列存在,则返回真,如果不存在则返回假

举例:

(1)数据数组

 

  1. int main()

  2. {

  3. int a[6] = {1, 2, 3, 5, 4};

  4. if (next_permutation(a, a + 5))

  5. {

  6. for (int i = 0; i < 5; i++)

  7. {

  8. cout << a[i] <<' ';

  9. }

  10. }

  11. return 0; 

  12. }

输出:1 2 4 5 3;也就是12 3 5 4的下一个排列咯,是不是很快……

 

 

(2)字符串(字母数组)

 

 
  1. int main()

  2. {

  3. string str = "abcde"; ///输出下5个排列

  4. int k = 0;

  5. while (next_permutation(str.begin(), str.end()))

  6. ///begin()与end()是string类的迭代器

  7. {

  8. k++;

  9. cout << str << endl;

  10. if (k == 5)

  11. {

  12. break;

  13. }

  14. }

  15. return 0;

 

 

输出:

abced

abdce

abdec

abecd

abedc

问题又来了,既然next_permutation可以求下一个排列,那有没有函数可以求上一个排列的?当然有啦!就是prev_permutation

用法与next_permutation是一样的。

例:

 

 
  1. int main()

  2. {

  3. string str = "abecd";

  4. if (prev_permutation(str.begin(), str.end()))

  5. ///begin()与end()是string类的迭代器

  6. {

  7. cout << str << endl;

  8. }

  9. return 0;

  10. }

 

输出:abdec;//看上面例子

原网址https://blog.csdn.net/GreatJames/article/details/75150001 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值