容器适配方法模拟Stack和Queue
1.首先介绍一个新的容器deque:
在C++中,`deque`(双端队列)是标准模板库里功能独特的容器。它优点显著,能在两端以$O(1)$时间复杂度高效插入和删除元素,也支持像数组那样以$O(1)$时间复杂度随机访问,还自带动态内存管理,使用方便。不过其缺点也不容忽视,因采用多数组块结构,内存开销比连续存储的`vector`大,在容器中间位置插入和删除元素时效率低,时间复杂度为$O(n)$,迭代器稳定性也较差。在使用场景上,`deque`适合构建双端队列数据结构,像任务调度器场景;也适用于既需随机访问又要频繁在两端操作的情况,如滑动窗口算法;但不适合频繁在容器中间插入和删除元素的场景,遇到此类场景更推荐`list`容器 。
接下来是用deque来当作缺省参数!!!!!
模拟栈:
namespace hush1
{
//容器适配器的方法----container不用考虑是什么底层容器,都可以适配出栈的先进后出
template<class T,class container=deque<T>>
class stack
{
typedef T* iterator;
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_back();
}
const T& top()
{
return _con.back();
}
bool empty()
{
return _con.empty();
}
bool size()
{
return _con.size();
}
private:
/*size_t* _arry;
size_t size;*/
container _con;
};
}
模拟队列:
namespace hush2
{
template<class T,class container=deque<T>>
class queue
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
bool empty()
{
return _con.empty();
}
const T& top()
{
return _con.front();
}
const T& back()
{
return _con.back();
}
private:
container _con;
};
}
main检验:
#include"SQ.h"
void test_stack()
{
hush1::stack<int, vector<int>> v;
v.push(1);
v.push(2);
v.push(3);
v.pop();
int ret = v.top();
cout << ret << endl;
/*for (size_t i = 0; i < v.size(); ++i)
{
cout << v[i] << end;
}*/
}
void test_queue()
{
hush2::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
while (!q.empty())
{
cout << q.top() << endl;
q.pop();
}
cout << endl;
}
int main()
{
/*test_stack();*/
test_queue();
return 0;
}