​ STL中的Queue容器是基于别的容器封装的,默认实现是基于deque封装实现了,但基于苯人的学习于实现顺序,我们基于List容器封装实现一个Queue容器。

实现如下:

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
49
50
51
52
#pragma once
#include "list.hpp" // 使用 kiri::list 作为底层容器

namespace kiri {

/**
* @brief 最小可用的队列容器(先进先出 FIFO)
* @tparam T 队列中存储的类型
*/
template<typename T>
class queue {
public:
using container_type = kiri::list<T>;

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

void pop() {
container_.pop_front(); // 队首出队
}

T& front() {
return container_.front();
}

const T& front() const {
return container_.front();
}

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

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

bool empty() const {
return container_.empty();
}

std::size_t size() const {
return container_.size();
}

private:
container_type container_; // 内部使用 kiri::list<T>
};

} // namespace kiri

成员函数 功能描述
void push(const T&) 向队尾添加一个元素(入队)
void pop() 移除队首元素(出队)
T& front() 返回队首元素的引用,队列为空时行为未定义
const T& front() const 返回队首元素的常量引用
T& back() 返回队尾元素的引用,队列为空时行为未定义
const T& back() const 返回队尾元素的常量引用
bool empty() const 判断队列是否为空
std::size_t size() const 返回队列中的元素数量