stack 和 queue
对于这两个特俗的结构两说,它们不是stl的容器部分,只是容器的适配器;
它们的实现,依赖于容器,也就是底层数据类型为容器;
由于它们的操作非常简单,并且代码也很容易实现,我就直接书写出看看就好;
注意一个:就是我们stack和 queue的成员数据类型也是一个模板。所以说,该成员数据类型必须支持stack 和 queue里面的操作,才可以完成stack的实现;
stack的模拟实现
#pragma once
#include<deque>
//栈的第二个模板参数Container,是stack底层成员数据的类型;
//由于栈只支持尾插尾删,所以说:我们第二个模板参数Container
//类型只能是:vector<T>,list<T>,deque<T>,因为stack的操作都在这些容器类型中有完成
namespace xjh{
template<class T, class Container = std::deque<T>>
class stack
{
public:
void push(const T& x) {
_Cont.push_back(x);
}
const T& top()const {
return _Cont.back();
}
void pop() {
_Cont.pop_back();
}
bool empty() const{
return _Cont.empty();
}
size_t size() const{
return _Cont.size();
}
//数据成员
private:
Container _Cont;
};
}
queue 的模拟实现
#pragma once
#include<deque>
//栈的第二个模板参数Container,是stack底层成员数据的类型;
//由于栈只支持尾插尾删,所以说:我们第二个模板参数Container
//类型只能是:vector<T>,list<T>,deque<T>,因为stack的操作都在这些容器类型中有完成
namespace xjh{
template<class T, class Container = std::deque<T>>
class stack
{
public:
void push(const T& x) {
_Cont.push_back(x);
}
const T& top()const {
return _Cont.back();
}
void pop() {
_Cont.pop_back();
}
bool empty() const{
return _Cont.empty();
}
size_t size() const{
return _Cont.size();
}
private:
Container _Cont;
};
}