queue的基本用法
队列是一种数据先进先出的一种数据结构,是一种容器适配器,queue可以使用底层模板deque来实现。但queue不允许随机访问队列的元素,没有迭代器,不能遍历queue,queue可以实现尾部插,和队首删除,可以访问到队首和队伍的数据。检查队列大小和判断队列是否为空的功能。
#include <queue>
queue<int> q;
q.push(const T& x);//将数据尾插
q.pop();//删除队首的数据
q.front();//获得队首的数据
q.back();//获得队尾的数据
q.size();//获得队列的大小
q.empty();//判断队列是否为空
模拟底层实现queue
namespace New_queue{
template<class T,class Container = deque<T>>
//默认适配deque
//queue不适配vector但可以适配list
class queue{
public:
void push(const T& x){
_con.push_back(x);
}
void pop(){
_con.pop_front();
}
const T& front(){
return _con.front();
}
const T& back(){
return _con.back();
}
size_t size(){
return _con.size();
}
bool empty(){
return _con.empty();
}
private:
Container _con;
};
}
因为成员变量是一个自定义的变量,会自己调用自己的构造函数,所以构造一个queue的类的时候我们不在需要自己构造了。默认的自定义的类型是deque,如果在定义一个对象的时候用了list做模板,成员变量就是list,如果使用了vector做为模板,则会报错,因为vector没有pop_front();的接口。