C++ stl队列Queue用法介绍:删除,插入等操作代码举例

本文详细介绍了C++标准模板库中的队列(queue)容器适配器,包括其基本概念、成员函数及使用示例。通过两个示例代码展示了如何进行队列的基本操作,如入队、出队、访问队首和队尾元素等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。

C++队列Queue类成员函数如下:

back()
返回最后一个元素

empty()
如果队列空则返回真

front()
返回第一个元素

pop()
删除第一个元素

push()
在末尾加入一个元素

size()
返回队列中元素的个数

定义queue 对象的示例代码如下:

queue q1;
queue q2;
queue 的基本操作举例如下:

queue入队,如例:q.push(x); 将x 接到队列的末端。

queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。

访问queue队首元素,如例:q.front(),即最早被压入队列的元素。

访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。

判断queue队列空,如例:q.empty(),当队列空时,返回true。

访问队列中的元素个数,如例:q.size()

C++ stl队列queue示例代码1:

#include <cstdlib>
#include <iostream>
#include <queue>
using namespace std;
int main()
{
    int e,n,m;
    queue<int> q1;
    for(int i=0;i<10;i++)
       q1.push(i);
    if(!q1.empty())
    cout<<"dui lie  bu kong\n";
    n=q1.size();
    cout<<n<<endl;
    m=q1.back();
    cout<<m<<endl;
    for(int j=0;j<n;j++)
    {
       e=q1.front();
       cout<<e<<" ";
       q1.pop();
    }
    cout<<endl;
    if(q1.empty())
    cout<<"dui lie  bu kong\n";
    system("PAUSE");
    return 0;
}

C++ stl队列queue示例代码2:

#include <iostream>
#include <queue>
#include <assert.h>
/*
调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> +
#include<queue>       #include<queue>
详细用法:
定义一个queue的变量     queue<Type> M
查看是否为空范例        M.empty()    是的话返回1,不是返回0;
从已有元素后面增加元素   M.push()
输出现有元素的个数      M.size()
显示第一个元素          M.front()
显示最后一个元素        M.back()
清除第一个元素          M.pop()
*/
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
queue <int> myQ;
cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl; 
for(int i =0; i<10 ; i++)
{
myQ.push(i);
}
for(int i=0; i<myQ.size(); i++)
{
printf("myQ.size():%d\n",myQ.size());
cout << myQ.front()<<endl;
myQ.pop();
}
system("PAUSE"); 
return 0;
}

输出结果:

现在 queue 是否 empty? 1
myQ.size():10
0
myQ.size():9
1
myQ.size():8
2
myQ.size():7
3
myQ.size():6
4
请按任意键继续. .

### C++ STL 中 `queue` 的详细用法和实现原理 #### 一、基本概念 在 C++ 标准模板库 (STL) 中,`queue` 是一种容器适配器(container adapter),它提供了先进先出(FIFO, First In First Out)的数据结构特性。其底层默认使用 `deque` 实现[^4]。 --- #### 二、头文件与声明方式 要使用 `queue`,需包含 `<queue>` 头文件。以下是几种常见的声明形式: ```cpp #include <queue> // 默认基于 deque 实现的标准队列 std::queue<int> q; // 自定义基础容器为 vector 的标准队列 std::queue<int, std::vector<int>> vq; ``` 上述代码展示了两种不同的声明方式:第一种是基于默认的 `deque` 容器;第二种则显式指定基础容器为 `vector`[^2]。 --- #### 三、成员函数及其功能 以下是 `queue` 提供的主要操作接口及其实现的功能说明: | 成员函数 | 功能描述 | |------------------|------------------------------------------------------------------------| | `push(value)` | 向队列尾部插入元素[^3]。 | | `pop()` | 删除队首元素,不返回被删除的值。 | | `front()` | 返回队首元素的引用,但不会移除该元素。 | | `back()` | 返回队尾元素的引用,但不会移除该元素。 | | `empty()` | 如果队列为空,则返回 true,否则返回 false。 | | `size()` | 返回当前队列中的元素数量。 | 示例代码如下: ```cpp #include <iostream> #include <queue> int main() { std::queue<int> q; // 插入元素队列尾部 q.push(1); q.push(2); // 访问队首元素并打印 std::cout << "Front element: " << q.front() << std::endl; // 移除队首元素 q.pop(); // 打印剩余队首元素 std::cout << "New front element after pop: " << q.front() << std::endl; return 0; } ``` --- #### 四、初始化方法 除了通过构造函数创建空队列外,还可以利用其他方式进行初始化: 1. **拷贝构造** 可以通过已有的队列对象进行复制初始化。 ```cpp std::queue<std::string> original {"hello", "world"}; std::queue<std::string> copy(original); // 拷贝构造 ``` 2. **从基础容器初始化** 若目标队列与其基础容器类型匹配,则可以使用基础容器直接初始化。 ```cpp std::deque<int> values {1, 2, 3}; std::queue<int> my_queue(values); // 使用 deque 初始化 queue ``` 以上两部分分别对应于如何高效地构建队列实例。 --- #### 五、内部实现机制 `queue` 并不是一个独立的容器,而是依赖于某种基础容器(如 `deque` 或 `list`)。它的主要职责是对这些基础容器的操作进行封装,从而提供特定的行为模式——即 FIFO 结构。具体来说: - 当调用 `push` 方法时,实际是在基础容器的尾部添加元素; - 调用 `pop` 则会移除基础容器头部的第一个元素。 这种设计使得开发者无需关心具体的内存管理细节,而只需专注于逻辑层面的需求。 --- #### 六、应用场景举例 `queue` 经常用于解决涉及顺序处理的任务场景,比如广度优先搜索算法(BFS)、任务调度系统等。下面是一个简单的 BFS 示例: ```cpp #include <iostream> #include <queue> #include <vector> using namespace std; void bfs(vector<vector<int>>& graph, int start) { vector<bool> visited(graph.size(), false); queue<int> q; q.push(start); visited[start] = true; while (!q.empty()) { int current = q.front(); cout << current << ' '; q.pop(); for (auto& neighbor : graph[current]) { if (!visited[neighbor]) { visited[neighbor] = true; q.push(neighbor); } } } } int main() { vector<vector<int>> adjList = {{}, {2, 3}, {1, 4}, {1, 4}, {2, 3}}; bfs(adjList, 1); return 0; } ``` 此程序实现了图的广度优先遍历过程,其中核心就是借助了 `queue` 数据结构来逐层访问节点[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值