目录
queue的简单介绍
以前我用c语言模拟实现过queue,也写过相关的博客,在这里不给各位老铁回顾queue的特征了~
队列的模拟实现(单链链表模拟)_暴走的橙子~的博客-CSDN博客
在这里我们来翻译一下C++文档来了解一下:
queue的使用
queue()
举个栗子:
int main()
{
queue<int> q;
return 0;
}
我们来调试一下看看情况:
push()
举个栗子:
int main()
{
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
return 0;
}
我们来调试一下看看情况:
pop()
举个栗子:
int main()
{
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.pop();
q.pop();
return 0;
}
我们调试一下看看这个过程:
empty()
举个栗子:
int main()
{
queue<int> q1;
q1.push(1);
q1.push(2);
q1.push(3);
cout << q1.empty() << endl;
queue<int> q2;
cout << q2.empty() << endl;
return 0;
}
运行结果:
size()
举个栗子:
int main()
{
queue<int> q1;
q1.push(1);
q1.push(2);
q1.push(3);
cout << q1.size() << endl;
queue<int> q2;
cout << q2.size() << endl;
return 0;
}
运行结果:
front()
举个栗子:
int main()
{
queue<int> q1;
q1.push(1);
q1.push(2);
q1.push(3);
cout << q1.front() << endl;
int& p = q1.front();
p = 10;
cout << q1.front() << endl;
return 0;
}
运行结果:
back()
举个栗子:
int main()
{
queue<int> q1;
q1.push(1);
q1.push(2);
q1.push(3);
cout << q1.back() << endl;
int& p = q1.back();
p = 30;
cout << q1.back() << endl;
return 0;
}
运行结果:
swap()
举个栗子:
int main()
{
queue<int> q1;
q1.push(1);
q1.push(2);
q1.push(3);
queue<int> q2;
q2.push(10);
q2.push(20);
q2.push(30);
q1.swap(q2);
while (!q1.empty())
{
cout << q1.front() << " ";
q1.pop();
}
cout << endl;
while (!q2.empty())
{
cout << q2.front() << " ";
q2.pop();
}
return 0;
}
运行结果:
queue的模拟实现
成员变量
template<class T,class Container = deque<T>>
private:
Container _con;
成员函数
bool empty() const
bool empty() const
{
return _con.empty();
}
size_t size() const
size_t size() const
{
return _con.size();
}
const T& front() const
const T& front() const
{
return _con.front();
}
T& front()
T& front()
{
return _con.front();
}
const T& back() const
const T& back() const
{
return _con.back();
}
T& back()
T& back()
{
return _con.back();
}
void push(const T& x)
void push(const T& x)
{
_con.push_back(x);
}
void pop()
void pop()
{
_con.pop_front();
}
完整代码
queue.h
#pragma once
#include<deque>
#include<iostream>
using namespace std;
namespace cyq
{
template<class T,class Container = deque<T>>
class queue
{
public:
bool empty() const
{
return _con.empty();
}
size_t size() const
{
return _con.size();
}
const T& front() const
{
return _con.front();
}
T& front()
{
return _con.front();
}
const T& back() const
{
return _con.back();
}
T& back()
{
return _con.back();
}
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
private:
Container _con;
};
}
测试代码
int main()
{
cyq::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
cout << q.size() << endl;
cout << "队尾数据:" << q.back() << endl;
while (!q.empty())
{
cout << q.front() << " ";
q.pop();
}
cout << endl;
return 0;
}
运行结果:
总结
我们发现C++中stack和queue的模拟实现都使用了容器适配器,很好地体现了复用的原则。通过模板可以让编译器自动推导存储的数据类型,这体现了泛型编程的特点。
可以通过与C语言中模拟实现队列来进行比较,看看其中代码的差距体现。在最上面有博客的链接~
看到这里,给博主支持一下吧~