前言
前面我们学习的都是C++标准模板库中的一些容器,今天我们要学习几个容器适配器,容器适配器的底层原理是通过适配另一个容器的功能来完成当前容器功能的实现,今天学习的栈和队列是通过deque来适配的,下面我们详细讲解stack和queue还有priority_queue的模拟实现
一、栈(stack)
1. 基本代码结构
2. 简介
3. 成员类型
4. 成员函数
1. 构造函数
栈的底层是使用deque来进行适配的,deque是一个自定义类型的成员,所以栈自身不需要实现默认构造函数,编译器生成的默认构造函数会去调用deque的默认构造函数完成初始化。
2. empty()
这个函数的功能是判断栈是否为空,如果为空则返回true,如果不为空,则返false。同样的道理,stack的底层是适配了一个deque,所以直接调用deque的empty()完成判断即可。
- 代码:
bool empty() const
{
return _con.empty();
}
3. size()
这个函数的功能是求栈中的元素个数。同样的道理,stack的底层是适配了一个deque,所以直接调用deque的size()完成判断即可。
- 代码:
size_t size() const
{
return _com.size();
}
4. top()
这个函数的功能是求栈的栈顶元素。同样的道理,stack的底层是适配了一个deque,所以直接调用deque的back()完成判断即可。
- 代码:
const T& top() const
{
return _con.back();
}
T& top()
{
return _con.back();
}
5. push()
这个函数的功能是将元素入栈。同样的道理,stack的底层是适配了一个deque,所以直接调用deque的push_back()完成判断即可。
- 代码:
void push(const T& val)
{
_con.push_back(val);
}
6.pop()
这个函数的功能是将元素出栈。同样的道理,stack的底层是适配了一个deque,所以直接调用deque的pop_back()完成判断即可。
- 代码:
void pop()
{
_con.pop_back();
}
7. 综合测试实现的stack的所有函数接口
- 代码:
void test_stack()
{
hjt::stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.push(4);
st.push(5);
while (!st.empty())
{
cout << st.top() << " ";
st.pop();
}
cout