STL—next_permutation函数

这篇具有很好参考价值的文章主要介绍了STL—next_permutation函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.next_permutation函数的定义

2.简单使用

2.1普通数组全排列

 2.2结构体全排列

2.3string

3.补充


STL—next_permutation函数,c++

1.next_permutation函数的定义

next_permutation函数会按照字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。与其相对的还有一个函数——prev_permutation函数。

next_permutaion(起始地址,末尾地址+1)
next_permutaion(起始地址,末尾地址+1,自定义排序)

注:next_permutation只能获得上一个排列,如果要获得全排列,那么就需要先对数组进行升序排序

2.简单使用

2.1普通数组全排列

#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
	int arr[4] = { 1, 2, 3, 4 };

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


	return 0;
}

 运行结果:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

 2.2结构体全排列

由于结构体默认不能比较大小,所以就不能使用默认的next_permutation()排列比较函数,需要使用自定义排列比较函数。

#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <algorithm>
using namespace std;

typedef struct
{
	int test;

	bool operator < (const fyd& a)
	{
		return test < a.test;
	}

}fyd;

fyd arr[4];

int main()
{
	arr[0].test = 2;
	arr[1].test = 1;
	arr[2].test = 4;
	arr[3].test = 3;

	do {
		for (int i = 0; i < 4; i++)
		{
			cout << arr[i].test << " ";
		}
		cout << endl;
	} while (next_permutation(arr, arr + 4));

	return 0;
}

运行结果:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

2.3string

string等数据结构不能直接用名字代表地址,只能够使用自带的迭代器begin()、end()实现全排列。

#define _CRT_SECURE_NO_WARNINGS 1


#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    string s;
    cin >> s;
    do{
        cout << s << endl;
    }while (next_permutation(s.begin(), s.end()));
    
    return 0;
}

运行结果:

abc //input

abc
acb
bac
bca
cab
cba

3.补充

推荐大家使用:cplusplus.com - The C++ Resources Network

可以查询到对应函数对应的头文件、底层代码及使用方式等。

例如:

STL—next_permutation函数,c++

 剩下的就不多说啦!自己探索叭!文章来源地址https://www.toymoban.com/news/detail-758567.html

到了这里,关于STL—next_permutation函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SAP使用函数NUMBER_GET_NEXT创建流水号

     1. 系统中设定流水号;使用T-Code:SNRO来创建一个流  输入Object:ZLC_001,然后单击创建。 然后输入Shorttext, Long text, Number length domain在写程序的时候应该会另外创建,这里测试就使用料号的Domain MATNR来做,其他的参数使用默认值就可以了,然后保存输入的资料。 系统提示创建

    2024年02月13日
    浏览(37)
  • Python——迭代器(可迭代、可迭代对象、迭代器、遍历本质、iter函数、next函数、__iter__方法、__next__方法、自定义可迭代对象与自定义迭代器、for循环本质)

    迭代(iter) 我们经常听说过\\\"版本迭代\\\"这个词,意思是在原来版本的基础上,再提升一个版本的过程。那么我们仅仅看看\\\"迭代\\\"这个词,会发现迭代就是一个根据原来的状态决定本次状态的过程 迭代应用于Python中,迭代具体是指根据原来的数据输出(并不一定是要打印,也可

    2024年02月04日
    浏览(54)
  • 【C++】STL 算法 ① ( STL 算法相关头文件 | 函数对象 / 仿函数 简介 | 函数调用操作符 | 重写函数调用操作符的类 | 函数对象 与 普通函数区别 )

    标准模板库 STL 算法 都定义在 algorithm , numeric 和 functional 三个头文件中 ; 使用 STL 标准模板库 算法时 , 导入上述 3 个头文件 , 导入时根据需求导入即可 , 不必都导入 ; algorithm 头文件 是 3 个 STL 算法头文件中 包含算法最多的一个 , 包含常用的 : 比较算法、交换算法、查找算法

    2024年01月16日
    浏览(52)
  • 【C++】STL-函数对象-内建函数对象

    2024年02月10日
    浏览(41)
  • 93.STL-系统内置仿函数

            目录  算术仿函数 关系仿函数  逻辑仿函数          C++ 标准库中提供了一些内置的函数对象,也称为仿函数,它们通常位于 functional 头文件中。以下是一些常见的系统内置仿函数: 功能描述: 实现四则运算 其中negate是一元运算,其他都是二元运算 仿函数原型:

    2024年02月04日
    浏览(30)
  • C++ 笔记 20 (STL函数对象)

    1. 函数对象 1.1 函数对象概念 概念: 重载 函数调用操作符 的类,其对象常称为函数对象; 函数对象使用重载的()时,行为类似函数调用,也叫仿函数。 本质: 函数对象(仿函数)是一个类,不是一个函数。 1.2 函数对象的使用 特点: 函数对象在使用时,可以像普通函数

    2024年02月02日
    浏览(43)
  • 浅谈C++|STL之算法函数篇

    在 C++ 中, for_each 是一个算法函数,位于 algorithm 头文件中。它接受一个范围(容器或迭代器对)以及一个函数对象(函数指针、函数、lambda 表达式等),用于对范围内的每个元素执行指定的操作。(遍历容器,,执行指定函数) 以下是 for_each 的函数原型: 其中, first 和

    2024年02月07日
    浏览(40)
  • C++ STL sort函数的底层实现

    sort函数 的底层用到的是 内省式排序 以及 插入排序 ,内省排序首先从快速排序开始,当递归深度超过一定深度(深度为排序元素数量的对数值)后转为堆排序。 先来回顾一下以上提到的3中排序方法: 快速排序:先选一个基准值(一般为首值),将比它大的数置于其右侧,

    2024年02月15日
    浏览(39)
  • STL之priority_queue与仿函数

    1.介绍 函数对象,又称仿函数,是可以像函数一样使用的对象,其原理就是重载了函数调用符: () 因此在此类中,一定有 operator() 的成员函数。 2.示例 如果T是内置类型,则直接进行比较。如果T是自定义类型,则会调用其operator()。 先创建一个_less类型的对象smaller,对于sma

    2024年02月10日
    浏览(39)
  • 【C++】STL 算法 - 累加填充算法 ( 元素累加算法 - accumulate 函数 | 元素填充算法 - fill 函数 )

    在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 accumulate 元素累加算法函数 用于 将 一个容器中的元素 进行累加操作 ; accumulate 元素累加函数 将 输入容器 的 [ 起始迭代器, 终止迭代器 ) 范围 内的 元素 在一个基础值 的 基础上 进行累加 , 得到一个累加值

    2024年01月22日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包