c++_容器适配器

  • 何为容器适配器?
    容器适配器就是使用标准的STL容器来满足一些特殊的需求。

  • 栈stack

    1
    2
    3
    4
    5
    6
    #include <stack>
    namespace std
    {
    template <typename T, typename Container = deque<T>>
    class stack;
    }

函数与表达式

  • 使用尾置返回类型(trailing return type):在c++11新标准中规定的简化函数返回类型的方法,如:auto fun(int i) -> int (*)[10];表示返回的是一个指向10个int的数组的指针。
  • 函数重载中形参:对于顶层const不起作用,对于底层const起作用,如:

跳台阶问题及其变种

问题描述

一个青蛙跳台阶,一次可以跳一步,也可以跳两步,则这只青蛙跳上n级台阶一共有多少种方法?

解析

类似斐波拉契数列,青蛙跳上第n级台阶,不是从第n-1级就是n-2级跳上来的,故可以转换为n-1和n-2的问题,即f(n)=f(n-1)+f(n-2),就是一个斐波拉契数列的问题。

进栈出栈顺序问题

描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

解析

对于每一个弹出的元素,在他之前的元素肯定在栈中,例如弹出序列4,5,3,2,2,这个序列4第一个弹出,那么1,2,3,4依次入栈,弹出4,然后5入栈,弹出5,最后弹出3,2,1,对于4,3,5,1,2这个序列,1,2,3,4入栈,4弹出,3弹出,然后5入栈,弹出5,此时栈中top位置的元素是2,不是1,因此此序列错误。