容器适配器之 stack

1. std::stack

底层可以使用vector、deque或者list。

1
2
3
4
5
// Defined in header <stack>
template<
    class T,
    class Container = std::deque<T>  // 底层容器默认是deque
> class stack;

2. 创建Stack容器对象

1
2
// 一个空的stack
std::stack<int> st;

1
2
// 指定底层容器为list
std::stack<int, std::list<int>> st;  

1
2
3
4
// 使用已有的基础容器实例初始化栈对象。
// 但要求基础容器类型和当前栈的底层类型相同。
std::list<int> lst = {4, 5, 6};
std::stack<int, std::list<int>> stack_list(lst);  // 拷贝lst的内存

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// 拷贝构造
// 要求基础栈数据类型和栈的底层类型相同。
#include <iostream>
#include <stack>

int main() {
    std::stack<int> original;
    original.push(10);
    original.push(20);
    original.push(30);

    std::stack<int> copied(original);

    while (!copied.empty()) {
        std::cout << copied.top() << " ";
        copied.pop();
    }

    return 0;
}

3. 成员函数

成员函数 功能
empty() 栈为空时返回true。
size() 返回 stack 栈中存储元素的个数。
top() 返回一个栈顶元素的引用,类型为 T&。如果栈为空,程序会报错。
push(const T& val) 先复制 val,再将 val 副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
push(T&& obj) 以移动元素的方式将其压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
pop() 弹出栈顶元素。
emplace(arg…) 在栈顶位置原地构造一个元素。
swap(stack & other_stack) 将两个stack中的元素进行交换,2 个 stack 中的元素类型以及底层采用的基础容器类型都必须相同。
comments powered by Disqus