C++从青铜到王者第十五篇:STL之queue类的初识和模拟实现
Posted 森明帮大于黑虎帮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++从青铜到王者第十五篇:STL之queue类的初识和模拟实现相关的知识,希望对你有一定的参考价值。
系列文章目录
前言
一、queue的介绍和使用
1.queue的介绍
- 翻译:
- 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。
- 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
- 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:
- 标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。
2.queue的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int> q1;
q1.push(1);
q1.push(2);
q1.push(3);
q1.push(4);
cout << q1.front() << endl;
cout << q1.back() << endl;
cout << q1.size() << endl;
while (!q1.empty())
{
cout << q1.front() << " ";
q1.pop();
}
cout << endl;
cout << q1.size() << endl;
cout << q1.empty() << endl;
return 0;
}
二、queue的模拟实现
因为queue的接口中存在头删和尾插,因此使用vector来封装效率太低,故可以借助list来模拟实现queue,具体如下:
#include<iostream>
#include<vector>
#include<list>
namespace yyw
{
template<class T,class Container>
class queue //队尾入,队头出
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
T& front()
{
return _con.front();
}
T& back()
{
return _con.back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
private:
Container _con;
};
void testqueue1()
{
queue<int, std::list<int>> q1;
q1.push(1);
q1.push(2);
q1.push(3);
q1.push(4);
std::cout << q1.size() << std::endl;
std::cout << q1.empty() << std::endl;
while (!q1.empty())
{
std::cout << q1.front() << " ";
q1.pop();
}
std::cout << std::endl;
}
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了queue的使用和模拟实现,而queue提供了大量能使我们快速便捷地处理数据的函数和方法,非常的便捷所以我们务必掌握。另外如果上述有任何问题,请懂哥指教,不过没关系,主要是自己能坚持,更希望有一起学习的同学可以帮我指正,但是如果可以请温柔一点跟我讲,爱与和平是永远的主题,爱各位了。
以上是关于C++从青铜到王者第十五篇:STL之queue类的初识和模拟实现的主要内容,如果未能解决你的问题,请参考以下文章
C++从青铜到王者第十四篇:STL之stack类的初识和模拟实现