​ stack 是一种后进先出(LIFO)的数据结构。你只能从“顶端”添加元素(push)或移除元素(pop),类似装盘子。

​ 先写一个轻量级的stack容器,我们将实现以下功能:

函数名 功能说明
push() 压栈,将元素放到栈顶
pop() 弹栈,移除栈顶元素
top() 查看栈顶元素
empty() 栈是否为空
size() 返回栈中元素数量

​ Stack的操作都较为简单,与vector类似,所以我们用之前写的vector作为底层容器,加上栈特性的限制,这里直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#pragma once
#include "vector.hpp" // 使用 kiri::vector 作为底层容器

namespace kiri {

/**
* @brief 简单的栈容器(后进先出 LIFO)
* @tparam T 元素类型
*/
template<typename T>
class stack {
public:
using container_type = kiri::vector<T>;

// 入栈
void push(const T& val) {
container_.push_back(val);
}

// 出栈
void pop() {
container_.pop_back();
}

// 查看栈顶
T& top() {
return container_.back();
}

const T& top() const {
return container_.back();
}

// 判断是否为空
bool empty() const {
return container_.empty();
}

// 返回元素个数
std::size_t size() const {
return container_.size();
}

private:
container_type container_; // 底层容器(vector)
};

} // namespace kiri

测试:

stack一代测试