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"
namespace kiri {
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_; };
}
|
测试:
