算法基础:使用STL实现全排列
发布日期:2021-06-30 20:20:24 浏览次数:2 分类:技术文章

本文共 1008 字,大约阅读时间需要 3 分钟。

在这里插入图片描述

STL是标准模版库的缩写,是泛化编程的实现,基本观念是将数据和操作进行分离,数据使用容器进行管理,操作由算法进行实现,迭代器在两者之间进行沟通,使得任何算法和任何容器都有可能进行交互运作。这篇文章以一个简单的例子进行介绍STL使用上的便利之处。

目录


临位对换实现全排列

比如通过临位对换方式实现的全排列,代码可能如下:

#include 
using namespace std;void swap(int* x, int* y) { int tmp = *x; *x = *y; *y = tmp;}void permutation(int *list, int k, int n) { if (k == n-1) { for (int i=0; i

STL的next_permutation

而使用STL的next_permutation,则非常简单,比如如下即可:

while (next_permutation(list,list+n)){            for (int i=0; i

唯一需要注意的是next_permutation默认输出的是按照字典序排序的下一个排列,比如1 2 3的输入,next_permutation的结果为1 3 2,上述代码的执行结果为,因为第一个1 2 3就是输入本身

1 3 2 2 1 3 2 3 1 3 1 2 3 2 1

这种情况下把while循环倒过来写,用do-while的方式就可以了(注意next_permutation本身是获取下一个,这种写法只能将本身也输出了而已)

do {            for (int i = 0; i < n; i++) cout << list[i] << " ";            cout << endl;        } while (next_permutation(list,list+n));

总结

所以看到实现相同的功能,只需要调用即可,另外除此之外,还提供了pre_permutation提供上一个排序的方式,当然还有很多其他的功能。另外对于不同类型,比如char或者其他类型,pre_permutation无需在重复实现permutation和交换函数,这也是使用STL的优势所在,集中力量关注算法本身,对于常见的一些功能直接调用即可。

转载地址:https://liumiaocn.blog.csdn.net/article/details/109269500 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++基础:STL之变长数组vector
下一篇:C语言基础:scanf使用指南

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月29日 19时26分41秒