C++教程-C++队列
![](https://wx.javatiku.cn/j/j301-t.jpg)
C++队列
在计算机科学中,我们处理各种各样的程序。每个程序都有自己的领域和用途。根据程序创建的目的和环境,我们可以选择许多不同的数据结构。其中之一就是“队列”。在讨论这种数据类型之前,让我们先看一下它的语法。
语法
template<class T, class Container = deque<T> > class queue;
这种数据结构基于先进先出(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 | 用于交换两个容器的内容。 关系运算符:非成员函数,用于队列的比较运算。 |
uses 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