C++ 队列
在计算机科学中,我们开发各种各样的程序。它们每个都有自己的领域和用途。根据程序创建的目的和环境,我们有许多可供选择的数据结构。其中之一就是“队列”。在讨论这种数据类型之前,让我们先来看一下它的语法。
语法
template<class T, class Container = deque<T> > class queue;
这种数据结构采用FIFO技术工作,其中FIFO代表先进先出。首先插入的元素将被首先提取,依此类推。有一个称为“front”的元素,它是最前面或者说是第一个位置的元素,还有一个称为“rear”的元素,它是最后位置的元素。在普通队列中,元素的插入在末尾进行,删除则从前面进行。
在应用领域,队列被用作容器适配器。
容器应该支持以下操作:
- empty
- size
- push_back
- pop_front
- front
- back
模板参数
T :该参数指定容器适配器将保存的元素类型。
Container :该参数指定队列元素保存在其中的内部容器对象。
成员类型
下面是队列成员类型及其简短描述的列表。
成员类型 | 描述 |
---|---|
value_type | 指定元素类型。 |
container_type | 指定底层容器类型。 |
size_type | 指定元素的大小范围。 |
reference | 容器的引用类型。 |
const_reference | 常量容器的引用类型。 |
函数
借助函数,可以在编程领域中处理对象或变量。队列提供了许多可以在程序中使用或嵌入的函数。下面是它们的列表:
功能 | 描述 |
---|---|
(构造函数) | 此函数用于构造队列容器。 |
empty | 此函数用于测试队列是否为空。如果队列为空,函数返回true,否则返回false。 |
size | 此函数返回队列容器的大小,即存储在队列中的元素数量。 |
front | 此函数用于访问队列的前一个元素。该元素在删除操作中起到非常重要的作用,因为所有的删除操作都是从前一个元素开始的。 |
back | 此函数用于访问队列的后一个元素。该元素在插入操作中起到非常重要的作用,因为所有的插入操作都是在后一个元素上执行的。 |
push | 此函数用于在队列的后端插入新元素。 |
pop | 此函数用于删除元素;队列中的元素从前端删除。 |
emplace | 此函数用于在当前后端元素上方插入新元素。 |
swap | 此函数用于交换两个容器的内容。 |
关系运算符 | 此非成员函数指定队列所需的关系运算符。 |
using allocator<queue> |
此非成员函数使用分配器对队列进行操作。 |
示例:一个简单的程序展示了基本队列函数的使用。
#include <iostream>
#include <queue>
using namespace std;
void showsg(queue <int> sg)
{
queue <int> ss = sg;
while (!ss.empty())
{
cout << '\t' << ss.front();
ss.pop();
}
cout << '\n';
}
int main()
{
queue <int> fquiz;
fquiz.push(10);
fquiz.push(20);
fquiz.push(30);
cout << "The queue fquiz is : ";
showsg(fquiz);
cout << "\nfquiz.size() : " << fquiz.size();
cout << "\nfquiz.front() : " << fquiz.front();
cout << "\nfquiz.back() : " << fquiz.back();
cout << "\nfquiz.pop() : ";
fquiz.pop();
showsg(fquiz);
return 0;
}
输出:
The queue fquiz is : 10 20 30
fquiz.size() : 3
fquiz.front() : 10
fquiz.back() : 30
fquiz.pop() : 20 30