c++模拟实现stack、queue
stack、queue模板缺省值用了deque
deque叫做双端队列,它融合了vector和list的优点
vector优点:小标随机访问,尾插尾删效率高
vector缺点:扩容(效率、空间浪费)、不合适头插头删
list优点:按需申请释放空间,任意位置O(1)插入删除
list缺点:不支持下标随机访问
deque提供的接口
#pragma once
#include<vector>
#include<list>
#include<forward_list>
#include <deque>
using namespace std;
namespace shichun
{
template<class T, class Container = deque<T>>
class stack
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_back();
}
T& top()
{
return _con.back();
}
const T& top()const
{
return _con.back();
}
size_t size()const
{
return _con.size();
}
bool empty()const
{
return _con.empty();
}
private:
Container _con;
};
void test_stack()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.push(400);
while (!s.empty())
{
cout << s.top() << " ";
s.pop();
}
cout << endl;
}
}
//queue
#pragma once
#include<vector>
#include<list>
#include<forward_list>
#include <deque>
using namespace std;
namespace shichun
{
// stack<int, vector<int>> s;
// stack<int, list<int>> s;
template<class T, class Container = deque<T>>
class queue
{
public:
void push(const T& x)
{
_con.push_back();
}
void pop()
{
_con.pop_front();
}
T& back()
{
return _con.back();
}
const T& back()const
{
return _con.back();
}
T& front()
{
return _con.front();
}
const T& front()const
{
return _con.front();
}
size_t size()const
{
return _con.size();
}
bool empty()const
{
return _con.empty();
}
private:
Container _con;
};
}