deque::pop_front() 和 deque::pop_back() 在 C++ STL 中的应用
双端队列或双向队列是一种序列容器,具有两端的扩展和收缩功能。它们类似于向量,但在插入和删除元素的末尾以及开头时更有效。与向量不同,不一定保证连续存储分配。
deque::pop_front()
pop_front() 函数用于从队列的前端弹出或删除元素。该值从队列的开头移除,容器大小减少 1。
语法:
dequename.pop_front()
参数:
不需要传递值作为参数。
结果:
从名为 dequename 的给定队列的前面删除值
示例:
输入: mydeque = 1, 2, 3
mydeque.pop_front();
输出: 2, 3
输入: mydeque = 3, 4, 1, 7, 3
mydeque.pop_front();
输出: 4, 1, 7, 3
错误和异常
- 无异常保证 – 如果抛出异常,则容器不会发生更改。
- 如果队列为空,则显示未定义行为。
// CPP程序示例
// pop_front()函数
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> mydeque;
mydeque.push_front(3);
mydeque.push_front(2);
mydeque.push_front(1);
// 双向队列变成 1, 2, 3
mydeque.pop_front();
// 双向队列变成 2, 3
for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
cout << ' ' << *it;
}
输出:
2 3
应用: 通过 push_front() 函数输入一个空队列,并使用以下数字和顺序,并打印该队列的反向顺序。
输入: 1, 2, 3, 4, 5, 6, 7, 8
输出: 8, 7, 6, 5, 4, 3, 2, 1
// CPP程序示例
// pop_front()函数的应用
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> mydeque{}, newdeque{};
mydeque.push_front(8);
mydeque.push_front(7);
mydeque.push_front(6);
mydeque.push_front(5);
mydeque.push_front(4);
mydeque.push_front(3);
mydeque.push_front(2);
mydeque.push_front(1);
// 双向队列变成 1, 2, 3, 4, 5, 6, 7, 8
while (!mydeque.empty()) {
newdeque.push_front(mydeque.front());
mydeque.pop_front();
}
for (auto it = newdeque.begin(); it != newdeque.end(); ++it)
cout << ' ' <<*it;
}
输出:
8 7 6 5 4 3 2 1
时间复杂度: O(1)
辅助空间 : O(1)
deque::pop_back()
pop_back() 函数用于从队列的后端弹出或删除元素。该值从队列的末尾移除,容器大小减少 1。
语法:
dequename.pop_back()
参数:
不需要传递值作为参数。
结果:
从名为 dequename 的给定队列的末尾或后面删除值
示例:
输入: mydeque = 1, 2, 3
mydeque.pop_back();
输出: 1, 2
输入: mydeque = 3, 4, 1, 7, 3
mydeque.pop_back();
输出: 3, 4, 1, 7
错误和异常
- 如果抛出异常,容器不会发生任何变化。
- 如果deque为空,则会显示未定义的行为。
//CPP程序示例
//pop_back()函数
# include <iostream>
# include <deque>
using namespace std;
int main()
{
deque<int> mydeque;
mydeque.push_front(5);
mydeque.push_front(4);
mydeque.push_front(3);
mydeque.push_front(2);
mydeque.push_front(1);
//队列变为1、2、3、4、5
mydeque.pop_back();
//队列变为1、2、3、4
for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
cout << ' ' << *it;
}
输出:
1 2 3 4
应用:
使用push_front()函数输入以下数字和顺序的空deque,并打印deque的反向输出。
输入:1、20、39、43、57、64、73、82
输出:82、73、64、57、43、39、20、1
//CPP程序示例
//pop_back()函数的应用
# include <iostream>
# include <deque>
using namespace std;
int main()
{
deque<int> mydeque, newdeque;
mydeque.push_front(82);
mydeque.push_front(73);
mydeque.push_front(64);
mydeque.push_front(57);
mydeque.push_front(43);
mydeque.push_front(39);
mydeque.push_front(20);
mydeque.push_front(1);
//队列变为1、20、39、43、57、64、73、82
while (!mydeque.empty()) {
newdeque.push_back(mydeque.back());
mydeque.pop_back();
}
for (auto it = newdeque.begin(); it != newdeque.end(); ++it)
cout << ' ' << *it;
}
输出:
82 73 64 57 43 39 20 1
时间复杂度: O(1)
辅助空间: O(1)
让我们以表格形式看一下它们之间的区别:
ID | deque::pop_front() | deque::pop_back() |
---|---|---|
1. | 用于删除deque容器中的第一个元素。 | 用于删除deque容器中的最后一个元素。 |
2. | 其语法为-:pop_front(); | 其语法为-:pop_back(); |
3. | 它不带任何参数。 | 它不带任何参数。 |
4. | 没有任何返回值。 | 没有任何返回值。 |
5. | 其复杂度是常数。 | 其复杂度是常数。 |