一,编译错误,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)。