C++ STL中queue中使用push在队尾插入以及使用pop从队首删除

C++ STL中queue中使用push在队尾插入以及使用pop从队首删除

queue 队列容器 是 先进先出 ( FIFO , First In First Out ) 容器 ;

该容器只允许在 " 队尾 " 进行插入操作 , 而在 " 队首 " 进行删除操作 ;
该容器两边开口 , 一边用于插入元素 ( 不能删除 ) , 一边用于删除元素 ( 不能插入 ) ;
stack 堆栈容器 是 一边开口 , 也就是 栈顶开口 , 栈顶可以 添加 / 删除 元素 , 栈底 不能进行操作 ;
queue 队列容器 的 插入 / 删除 元素操作 时间复杂度是 O(1) ;

queue 队列容器 提供的 api 成员函数 与 stack 堆栈容器 类似 , 只提供有限的成员函数 , 如 :

queue#push 函数 : 队尾 插入元素
queue#pop 函数 : 队首 删除元素
queue#front 函数 : 查看 队首元素

对于 queue,元素在末尾插入,这是使用成员方法 push( )完成的:
numsInQ.push (5); // elements pushed are inserted at the end
删除是在开头进行的,这是使用成员方法 pop( )完成的:
numsInQ.pop (); // removes element at front
与 stack 不同, queue 允许查看其两端的元素,即容器的开头和末尾:
cout << "Element at front: " << numsInQ.front() << endl;
cout << "Element at back: " << numsInQ.back () << endl;
程序清单 24.4 演示了如何插入、删除和查看元素。

0: #include <queue>
1: #include <iostream>
2:
3: int main ()
4: {
5: using namespace std;
6: queue <int> numsInQ;
7:
8: cout << "Inserting {10, 5, -1, 20} into queue" << endl;
9: numsInQ.push (10);
10: numsInQ.push (5); // elements are inserted at the end
11: numsInQ.push (-1);
12: numsInQ.push (20);
13:
14: cout << "Queue contains " << numsInQ.size () << " elements" << endl;
15: cout << "Element at front: " << numsInQ.front() << endl;
16: cout << "Element at back: " << numsInQ.back () << endl;
17:
18: while (numsInQ.size () != 0)
19: {
20: cout << "Deleting element: " << numsInQ.front () << endl;
21: numsInQ.pop (); // removes element at front
22: }
23:
24: if (numsInQ.empty ())
25: cout << "The queue is now empty!" << endl;
26:
27: return 0;
28: }

输出:
Inserting {10, 5, -1, 20} into queue
Queue contains 4 elements
Element at front: 10
Element at back: 20
Deleting element: 10
Deleting element: 5
Deleting element: -1
Deleting element: 20
The queue is now empty!

分析:
在第9~12行, 使用push( )在队列numsInQ的末尾插入元素。第15行和第16行分别使用函数front( )
和 back( )引用了队首和队尾的元素。第 18~22 行的 while 循环显示队首的元素,然后使用 pop( )删除
它(第 21 行),直到队列为空。从输出可知,元素被删除的顺序与插入顺序相同,因为元素在队尾插
入,从队首删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值