C++ – queue 和 stack模拟实现
1. queue模拟实现
队列是先进先出的特性,这里要支持vector、list、deque等等,这里queue和stack模拟实现,都是直接复用
1.0 成员变量
template <class T, class Container = list<T>> Container _container;
1.1 push()
void push(const T& val) { _container.push_back(val); }
1.2 pop()
void pop() { _container.pop_front(); }
1.3 front()
const T& front() { return _container.front(); }
1.4 back()
const T& back() { return _container.back(); }
1.5 size()
size_t size() { return _container.size(); }
1.6 empty()
bool empty() { return _container.empty(); }
- 解释class Container作用
就拿push()来说,_contatiner.push_back(val);假设 _Container是list类型,那么 _container就是list类型,这时 _container直接调用库接口push_back();
1.7 完整代码
namespace my_queue { template <class T, class Container = list<T>> class queue { public: void push(const T& val) { _container.push_back(val); } void pop() { _container.pop_front(); } const T& front() { return _container.front(); } const T& back() { return _container.back(); } size_t size() { return _container.size(); } bool empty() { return _container.empty(); } private: Container _container; }; }
2. stack模拟实现
2.0 成员变量
template <class T, class Container = vector<T>> Container _container;
2.1 push()
void push(const T& val) { _container.push_back(val); }
2.2 pop()
void pop() { _container.pop_back(); }
2.3 top()
const T& top() { return _container.back(); }
2.4 back()
const T& back() { return _container.back(); }
2.5 size()
size_t size() { return _container.size(); }
2.6 empty()
bool empty() { return _container.empty(); }
2.7 完整代码
namespace my_stack { template <class T, class Container = vector<T>> class stack { public: void push(const T& val) { _container.push_back(val); } void pop() { _container.pop_back(); } const T& top() { return _container.back(); } const T& back() { return _container.back(); } size_t size() { return _container.size(); } bool empty() { return _container.empty(); } private: Container _container; }; }