`
暴风雪
  • 浏览: 388907 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

STL中的next_permutation函数

 
阅读更多

转自http://blog.sina.com.cn/s/blog_6635898a0102e0k9.html

在C++的标准函数库STL中,next_permutation()函数用于求数列的全排列。

函数原型:
template<class BidirectionalIterator>
    bool next_permutation(
       BidirectionalIterator _First,
       BidirectionalIterator _Last
    );

template<class BidirectionalIterator, class BinaryPredicate>
    bool next_permutation(
       BidirectionalIterator _First,
       BidirectionalIterator _Last,
       BinaryPredicate _Comp
    );

两个重载函数,第二个带谓词参数_Comp,其中只带两个参数的版本,默认谓词函数为"小于"。
返回值:bool类型(当前数列是全排列最后一个时,返回false)

例子1(int型):
int main(){
    int a[] = {3,1,2};
    do{
        cout << a[0] << " " << a[1] << " " << a[2] << endl;
    }while (next_permutation(a, a+3));
    return 0;
}
输出:312/321  因为原数列不是从最小字典排列开始。

所以要想得到所有全排列
int a[] = {3,1,2}; 然后先排序为:a[] = {1,2,3};

例子2(string型)
int main(){
    string str;
    cin >> str;
    sort(str.begin(), str.end());
    do{
        cout << str << endl;
    }while (next_permutation(str.begin(), str.end()));
    return 0;
}

库中另一函数prev_permutation()与next_permutation()相反,懂的...

分享到:
评论

相关推荐

    2017年计算机等级考试二级C++辅导:全罗列生成算法:next_permutation .docx

    本文将详细介绍C++/STL中的next_permutation函数,包括其概念、内部算法和实现细节。 概念: next_permutation函数是C++/STL中定义的一个高效的算法,用于生成指定序列的下一个较大的排列。该函数广泛应用于各种...

    排列_next_permutation1

    next_permutation 函数是 C++/STL 中定义的函数之一,它可以生成给定序列的下一个较大的排列。prev_permutation 函数则是生成给定序列的上一个较小的排列。二者的原理相同,仅遍例顺序相反。 为了生成下一个较大的...

    next_permutation和prev_permutation两个STL自带排列函数

    一:next_permutation(start,end,//cmp) 使用默认排序方法:按照字典序从小到大 int arr[3]={1,2,3}; do{ for(int num:arr){ cout&lt;&lt;num&lt;&lt; ; } cout&lt;&lt;endl; }while(next_permutation...

    算法题常用STL_STL_

    在C++编程中,STL(Standard Template Library,标准模板库)是一组高效、泛型的容器、迭代器、算法和函数对象的集合,极大地提高了程序员的开发效率。本资源包“算法题常用STL”专门针对算法题目,提供了一些常用的...

    STL各种函数讲解

    - 对于排序算法,如`sort()`和`next_permutation()`,确保数据满足相应的要求,例如`next_permutation()`要求输入序列已经升序排列。 在学习和使用STL时,理解各个组件的工作原理、选择合适的容器和算法、以及熟练...

    几个STL算法:includes,set.docx

    在给定的文件中,主要讨论了几个STL算法,包括`includes`、`set_difference`、`set_intersection`、`set_symmetric_difference`、`set_union`以及`prev_permutation`和`next_permutation`。下面将详细介绍这些算法的...

    几个STL算法:includes,set.pdf

    本篇将重点介绍在给定标题和描述中提到的几个STL算法:`includes`、`set_difference`、`set_intersection`、`set_symmetric_difference`、`set_union`以及`prev_permutation`和`next_permutation`。 1. `includes`...

    枚举专题.docx

    通过这个例子,我们可以学习到如何使用STL中的`next_permutation`函数进行全排列枚举,以及如何在C++中解决基于数字和算术运算的组合问题。此外,它还展示了如何通过编程实现逻辑判断和循环来处理数学问题,这对于...

    ACM_STL

    `accumulate`可用于快速求和,`next_permutation`和`prev_permutation`则可以方便地生成序列的所有可能排列。 ### 结论 总之,STL是C++程序员在ACM竞赛和其他算法挑战中不可或缺的强大武器。熟练掌握STL的各种容器...

    acm ————stl

    - 使用`std::next_permutation`函数生成所有可能的排列组合。 - 输出所有合法的仓库访问序列。 3. **代码实现**(示例代码片段): ```cpp #include #include #include using namespace std; int main...

    STL_资料(袁辉勇_整理)

    **算法**是STL中最核心的部分之一,它们是一组用于操作容器中数据的模板函数。STL提供了大量的算法模板,如排序、搜索、转换等,涵盖了大部分常见的数据处理需求。 - **for_each**:遍历容器中的每一个元素,并对其...

    算法实验源代码

    为了使用`next_permutation`函数,同样需要包含`&lt;algorithm&gt;`头文件。 #### 2. 定义数组及初始化 ```cpp const int N = 4; int arr[N] = {1, 2, 3, 4}; ``` 定义了一个固定大小为4的整型数组,并初始化。 #### 3. ...

    字符串排列问题,不含重复

    在C++中,我们可以利用回溯法(Backtracking)或者使用STL中的`next_permutation`函数来解决这个问题。回溯法是一种试探性的解决问题方法,当发现某一步走不通时,会退回一步,尝试其他的可能性。 对于回溯法,我们...

    带油重复字符串全排列递归解法

    常见得全排列有三种解决方案,for循环穷举,stl摸板函数next_permutation,还有DFS深度优先搜索,当我们遇到带有重复的字符串时应该考虑除去重复的部分。

    STL、线段树代码库.docx

    2. **排序算法**:STL提供了一个通用的`sort`函数,可以对容器中的元素进行排序。例如,`sort(ivec.begin(), ivec.end())`会将ivec中的元素按升序排序。此外,还有`stable_sort`,它是一个稳定的排序算法,能保持...

    深入全排列算法及其实现方法

    在本文中,我们将深入探讨全排列的两种主要实现方法:递归实现和STL(标准模板库)的`next_permutation()`函数。 **一、递归实现** 递归实现全排列的基本思想是,每次选择一个元素作为当前排列的第一个元素,然后...

    北京邮电大学acm集训队stl

    `next_permutation` 是STL中用于生成下一个排列的函数。它返回一个布尔值,指示是否成功生成下一个更大的排列。该函数要求输入序列是升序排列的。 - **语法**:`bool next_permutation(BidirectionalIterator first...

    C++标准模板库算法.pdf

    - next_permutation、prev_permutation:生成序列的下一个或上一个排列。 STL算法中的累加和差分函数: - accumulate:计算序列中所有元素的累加和。 - partial_sum:计算序列的部分和。 - adjacent_difference:...

Global site tag (gtag.js) - Google Analytics