操作:
函数 | 说明 |
---|---|
stack() | 构造空的栈 |
empty() | 检测stack是否为空 |
size() | 返回stack中元素的个数 |
top() | 返回栈顶元素的引用 |
push() | 将元素val压入stack中 |
pop() | 将stack中尾部的元素弹出 |
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> st;//一个空栈
st.push(1);
st.push(2);
st.push(3);//push进去3个
while (!st.empty())//当st不空进循环
{
cout << st.top() << endl;//输出栈顶元素
st.pop();//栈顶出栈
}//遍历结束
}
函数 | 说明 |
---|---|
queue() | 构造空的队列 |
empty() | 检测队列是否为空,是返回true,否则返回false |
size() | 返回队列中有效元素的个数 |
front() | 返回队头元素的引用 |
back() | 返回队尾元素的引用 |
push() | 在队尾将元素val入队列 |
pop() | 将队头元素出队列 |
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int> q;//一个空队列
q.push(1);
q.push(2);
q.push(3);//push进去3个
while (!q.empty())//当q不空进循环
{
cout << q.front() << endl;//输出队头元素
q.pop();//出队
}//遍历结束
return 0;
}
容器适配器是一种将现有的容器类型适配为不同接口的容器的工具。C++标准库提供了三种主要的容器适配器:栈(stack)、队列(queue)和优先队列(priority_queue)。这些适配器都是基于现有的序列容器(如vector、deque或list)实现的,但提供了不同的接口和行为。
今天先来模拟栈和队列。优先队列,下次单独细讲
怎么理解“适配为不同接口的容器”:
容器适配器(上述三种)提供的操作接口与底层容器的操作接口不同。虽然容器适配器底层使用了常见的序列容器(如vector、deque或list)来存储数据,但是它们暴露的操作接口与这些底层容器不同。 举个例子,让我们比较一下栈(stack)适配器和vector容器的接口:
如你所见,尽管栈适配器的底层容器可能是vector,但它提供了与vector不同的操作接口。栈适配器隐藏了vector的细节,只暴露了栈的相关操作,使得我们可以更方便地使用栈这种数据结构。
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque,比如:
stack.h:用来实现stack queue.h:用来实现queue test.cpp:进行测试
#pragma once
namespace MyStack
{
template<class T, class Container = deque<T>>
class stack
{
public:
//构造函数、析构函数之类的会去调用传过来的的类的
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
const T& top()
{
return _con.front();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
private:
Container _con;//封装这个类型
};
}
#pragma once
namespace MyQueue
{
template<class T, class Container = deque<T>>
class queue
{
public:
//构造函数、析构函数之类的会去调用传过来的的类的
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
const T& front()
{
return _con.front();
}
const T& back()
{
return _con.back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
private:
Container _con;//封装这个类型
};
}
好啦大家,这次就到这里啦!!下次就带来优先级队列priority_queue
的介绍和模拟。感谢大家