寒假假期训练学习总结及反思 2022/1/3

一,编译错误,error: ‘gets’ was not declared in this scope解决方法

编译错误: error: ‘gets’ was not declared in this scope gets(s)。这个错误是始料未及的,毕竟在codeblock中是可以顺利编译的,最多是结果有错,而且get(str)的操作在算法笔记是有详细说明可使用的,搜索后发现get()方法确实已经不被PAT编译器支持,并且网上也有一些方法改进对一行字符串输入的读取。我这里采用的是cin.getline的操作。
 

二,next_permutation函数

1.next_permutation(a,a+n)函数常用于全排列问题。

2.next_permutation实现原理。

在《STL源码解析》中找到了这个函数,在此也简单叙述一下原理:

在STL中,除了next_permutation外,还有一个函数prev_permutation,两者都是用来计算排列组合的函数。前者是求出下一个排列组合,而后者是求出上一个排列组合。

所谓“下一个”和“上一个”,书中举了一个简单的例子:对序列 {a, b, c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素。

3.小结

用next_permutation和prev_permutation求排列组合很方便,但是要记得包含头文件#include 。
虽然最后一个排列没有下一个排列,用next_permutation会返回false,但是使用了这个方法后,序列会变成字典序列的第一个,如cba变成abc。prev_permutation同理。

三,stack

1.stack翻译为,是STL中实现的一个后进先出的容器。要使用 stack,应先添加头文件include<stack>,并在头文件下面加上“ using namespacestd;"

2.stack的定义

其定义的写法和其他STL容器相同, typename可以任意基本数据类型或容器:stack<typename> name;

3.stack容器内元素的访问

由于栈(stack)本身就是一种后进先出的数据结构,在STL的 stack中只能通过top()来访问栈顶元素。

4.stack常用函数实例解析

(1)push()。push(x)将x入栈,时间复杂度为O(1),实例见“ stack容器内元素的访问”。

(2)top()。top()获得栈顶元素,时间复杂度为O(1),实例见“ stack容器内元素的访问”。

(3)pop()。pop()用以弹出栈顶元素,时间复杂度为O(1)。

(4)empty()。empty()可以检测stack是否为空,返回true为空,返回false为非空,时间复杂度为O(1)。

(5)size()。size()返回stack内元素的个数,时间复杂度为O(1)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值