代码位置:https://github.com/liangleilei123/My_STL/tree/main/Code/include
概述
queue
是先进先出的数据结构。和stack
的实现原理相同,都是通过底层容器实现的。底层容器默认是deque
,也可以是list
queue的全部源码
template<class T, class Sequence = deque<T>>
class queue {
friend bool operator==(const queue &x, const queue &y);
friend bool operator<(const queue &x, const queue &y);
public:
typedef typename Sequence::value_type value_type;
typedef typename Sequence::size_type size_type;
typedef typename Sequence::reference reference;
typedef typename Sequence::const_reference const_reference;
protected:
Sequence c;
public:
//以下完全利用Sequence c的操作,完成stack的操作
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference front() { return c.front(); }
reference back() { return c.back(); }
const_reference back() const { return c.back(); }
//stack()是后进先出
void push(const value_type &x) { c.push_back(x); }
void pop() { c.pop_front(); }
};
template<class T, class Sequence>
bool operator==(const queue<T, Sequence> &x, const queue<T, Sequence> &y) {
x.c == y.c;
}
template<class T, class Sequence>
bool operator<(const queue<T, Sequence> &x, const queue<T, Sequence> &y) {
return x.c < y.c;
}
测试代码:
#include "my_list.h"
#include "my_queue.h"
#include "iostream"
template<class T = int>
void print_value(T x) {
std::cout << x << std::endl;
}
int main() {
//mystl::queue<int, mystl::list<int>> q; //使用list为底层容器
mystl::queue<int> q; //默认使用deque为底层容器
q.push(1);
q.push(3);
q.push(5);
q.push(7);
print_value(q.size()); //4
print_value(q.front()); //1
q.pop();
print_value(q.front()); //3
q.pop();
print_value(q.front()); //5
q.pop();
print_value(q.front()); //7
print_value(q.size()); //1
}