第一次尝试
#include<iostream>
#include<vector>
#include<list>
using namespace std;
template<class T, class Con = vector<T>>
class mystack {
public:
mystack(){}
void push(const T& val) {
_st.push_back(val);
}
void pop() {
_st.pop_back();
}
T& top() {
return _st.back();
}
const T& top()const {
return _st.back();
}
size_t size()const {
return _st.size();
}
bool empty()const {
_st.empty();
}
private:
Con _st;
};
template<class T, class Con = list<T>>
class myqueue {
public:
myqueue() {}
void push(const T& val) {
_qu.push_back(val);
}
void pop() {
_qu.pop_front();
}
T& front() {
return _qu.front();
}
const T& front()const {
return _qu.front();
}
T& back() {
return _qu.back();
}
const T& back()const {
return _qu.back();
}
size_t size()const {
return _qu.size();
}
bool empty()const {
_qu.empty();
}
private:
Con _qu;
};
int main() {
return 0;
}
在本代码中,使用其他底层的容器类来实现了stack
和queue
这两个容器,不过在 STL 源码中人家使用的是deque
来实现的这两个容器,而我分别使用了vector
和list
来实现,毕竟双端队列接触较少,而前段时间刚好学习了vector
和list
;
实现的过程非常简单,只需要调用使用的容器类的标准接口即可,无需我们多做什么,就连构造函数也不需要我们重新实现,因为自定义类型作为成员变量时,会被默认的构造函数自动调用其自身的构造函数,析构也是同样的道理;