📅  最后修改于: 2023-12-03 15:13:56.662000             🧑  作者: Mango
在C++ Standard Library (STL)中,queue是一个基础容器,支持先进先出 (First-In-First-Out, FIFO) 的容器适配器。
queue提供了push()和pop()两个主要函数,用于添加元素到队尾和移除队首元素。在本篇文章中,我们将逐一介绍这两个函数的用法以及它们的实现细节。
queue::push()函数用于将元素添加到队列末尾。
语法:
void push(const value_type& val);
其中,value_type是queue的元素类型,val是要加入队列的元素。
示例代码:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
q.push(10);
q.push(20);
q.push(30);
while(!q.empty())
{
cout << q.front() << endl;
q.pop();
}
return 0;
}
输出:
10
20
30
上述代码中,我们声明了一个queue
queue::pop()函数用于移除队首元素。
语法:
void pop();
示例代码:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
q.push(10);
q.push(20);
q.push(30);
cout << "Before pop: " << q.size() << " elements in queue." << endl;
q.pop();
cout << "After pop: " << q.size() << " elements in queue." << endl;
return 0;
}
输出:
Before pop: 3 elements in queue.
After pop: 2 elements in queue.
上述代码中,我们声明了一个queue
queue是由deque容器实现的队列适配器。deque是一种双端队列,支持随机访问和在队首和队尾执行快速插入和删除操作。queue在deque容器上提供了一个抽象层,只公开了插入和删除队首元素的push()和pop()函数。
因此,我们可以使用deque容器来手动实现一个类似queue的简单队列,如下所示:
#include <iostream>
#include <deque>
using namespace std;
template<typename T>
class my_queue
{
private:
deque<T> _data;
public:
void push(const T& val)
{
_data.push_back(val);
}
void pop()
{
_data.pop_front();
}
T& front()
{
return _data.front();
}
bool empty() const
{
return _data.empty();
}
int size() const
{
return _data.size();
}
};
int main()
{
my_queue<int> q;
q.push(10);
q.push(20);
q.push(30);
while(!q.empty())
{
cout << q.front() << endl;
q.pop();
}
return 0;
}
上述代码中,我们使用deque实现了一个简单的队列适配器——my_queue。该类提供了push()、pop()、front()、empty()和size()等常见接口,其中前3个接口与queue一致。我们采用了模板类实现,使得my_queue能够存储不同类型的元素。
可以看出,queue的优点在于提供了简洁明了的接口,简化了队列的使用代码。但如果需要自定义更多队列功能,使用deque手动实现一个类似queue的队列也是一种不错的选择。
通过本篇文章,我们了解了C++ STL的queue容器适配器,学会了使用push()和pop()函数向队列中添加和删除元素,实现了一个简单的queue类似的队列。queue容器具有简单易用的API,可适用于各种FIFO场景,有助于程序员提高开发效率和代码可读性。