1 -> queue的介绍和使用
1.1 -> queue的介绍
queue的文档介绍
1. 队列是一种容器适配器,专门用于在FIFO(先进先出)上下文中操作,其中从容器一端插入元素,另一端提取元素。
2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类,该底层容器应至少支持以下操作:
- empty: 检测队列是否为空
- size: 返回队列中有效元素的个数、
- front: 返回队头元素的引用
- back: 返回队尾元素的引用
- push_back: 在队列尾部入队列
- pop_front: 在队列头部出队列
4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为deque实例化指定容器类,则使用标准容器deque。
1.2 -> queue的使用
函数声明 | 接口说明 |
---|---|
queue() | 构造空的队列 |
empty() | 检测队列是否为空,是返回true,否则返回false |
size() | 返回队列中有效元素个数 |
front() | 返回队头元素的引用 |
back() | 返回队尾元素的引用 |
push() | 在队尾将元素val入队列 |
pop() | 将队头元素出队列 |
相关题目:
用队列实现栈
代码语言:javascript复制class MyStack
{
public:
queue<int> q1;
queue<int> q2;
MyStack()
{
}
void push(int x)
{
q2.push(x);
while (!q1.empty())
{
q2.push(q1.front());
q1.pop();
}
swap(q1, q2);
}
int pop()
{
int x = q1.front();
q1.pop();
return x;
}
int top()
{
int x = q1.front();
return x;
}
bool empty()
{
return q1.empty();
}
};
1.3 -> queue的模拟实现
因为queue的接口中存在头删和尾插,因此使用vector来封装效率太低,故可以借助list来模拟实现queue。
代码语言:javascript复制#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <list>
using namespace std;
namespace fyd
{
template<class T>
class Queue
{
public:
Queue(){}
void push(const T& x)
{
_c.push_back(x);
}
void pop()
{
_c.pop_front();
}
T& back()
{
return _c.back();
}
const T& back()const
{
return _c.back();
}
T& front()
{
return _c.front();
}
const T& front()const
{
return _c.front();
}
size_t size()const
{
return _c.size();
}
bool empty()const
{
return _c.empty();
}
private:
list<T> _c;
};
}
感谢各位大佬支持!!!
互三啦!!!