C++基础:STL之双向队列deque

╰+攻爆jí腚メ 2022-12-18 03:55 340阅读 0赞

在这里插入图片描述
这篇文章介绍一下STL中队列deque的基本使用方法。

目录

  • 双向队列deque
  • 头文件和命名空间
  • 常用的成员函数
  • 代码使用示例
  • 示例执行结果
  • 总结

双向队列deque

双向队列也是队列,是最为常见的一种数据结构,双向队列在STL中有deque的实现。包含双向队列在内,队列中的元素满足FIFO(先进先出)。主要特点如下:

  • 元素需满足FIFO:First In First Out
  • 出口端称为队头(Front),入口端称为队尾(Rear)
  • 可以使用数组或者链表来存储数据
  • 操作主要有入队(Enqueue)和出队(Dequeue)
  • 可以根据需要实现循环队列或者双向队列
  • 只能在队尾插入数据,在队头删除数据
  • 关于队列的说明内容可参看:https://blog.csdn.net/liumiaocn/article/details/108091698

头文件和命名空间

#include
using namespace std;

常用的成员函数








































































queue函数名 用途 功能说明 时间复杂度
size() 查询遍历 获取元素个数 O(1)
begin() 查询遍历 获取指向第一个元素的迭代器 O(1)
end() 查询遍历 获取指向最后一个元素的迭代器 O(1)
front() 查询遍历 获取指向第一个元素的迭代器 O(1)
back() 查询遍历 获取指向最后已给元素的迭代器 O(1)
push_back 插入 在末尾插入数据x O(1)
pop_back 删除 删除最后一个元素 O(1)
push_front 插入 在末尾插入数据x O(1)
pop_front 删除 删除最后一个元素 O(1)
empty 删除 删除所有元素 O(n)

注:deque的成员函数主要包括插入和删除,实际对应着队列操作的入队和出队两个操作,然后就是获取元素个数和对头元素的操作,都是负载度为O (1)的操作。和stack相比,上述5个函数的函数名只是front和top有区别,其他函数名一致。


代码使用示例

  1. #include <iostream>
  2. #include <deque>
  3. using namespace std;
  4. void print_element(deque <char> q) {
  5. if (!q.empty()) {
  6. cout << "Size:" << q.size() << " Queue Top Element : " << q.back() << " Queue:";
  7. } else {
  8. cout << "Size:" << q.size() << endl;
  9. }
  10. deque<char>::iterator it = q.begin();
  11. while(it != q.end()) cout << *it++;
  12. cout << endl;
  13. }
  14. int main() {
  15. deque <char> q;
  16. cout << "Queue Element In " << endl;
  17. print_element(q);
  18. q.push_back('L');
  19. print_element(q);
  20. q.push_back('i');
  21. print_element(q);
  22. q.push_back('u');
  23. print_element(q);
  24. cout << endl << "Queue Element Out " << endl;
  25. q.pop_back();
  26. print_element(q);
  27. q.pop_back();
  28. print_element(q);
  29. q.clear();
  30. print_element(q);
  31. q.push_back('i');
  32. print_element(q);
  33. q.push_front('L');
  34. print_element(q);
  35. q.push_back('u');
  36. print_element(q);
  37. q.pop_back();
  38. print_element(q);
  39. q.pop_front();
  40. print_element(q);
  41. q.pop_front();
  42. print_element(q);
  43. }

示例执行结果

  1. Queue Element In
  2. Size:0
  3. Size:1 Queue Top Element : L Queue:L
  4. Size:2 Queue Top Element : i Queue:Li
  5. Size:3 Queue Top Element : u Queue:Liu
  6. Queue Element Out
  7. Size:2 Queue Top Element : i Queue:Li
  8. Size:1 Queue Top Element : L Queue:L
  9. Size:0
  10. Size:1 Queue Top Element : i Queue:i
  11. Size:2 Queue Top Element : i Queue:Li
  12. Size:3 Queue Top Element : u Queue:Liu
  13. Size:2 Queue Top Element : i Queue:Li
  14. Size:1 Queue Top Element : i Queue:i
  15. Size:0

总结

变长支持、泛化类型、常用功能函数内嵌、可以使用其他多种STL的函数、使用简单,而且也支持迭代器等,都是deque被使用的原因。

发表评论

表情:
评论列表 (有 0 条评论,340人围观)

还没有评论,来说两句吧...

相关阅读

    相关 浅析c++ stl deque

    1.stl容器之deque 在stl中,容器是用来存储数据元素集合的一种数据结构。我们知道分析数据结构必须从两方面 入手:(1)逻辑结构(2)物理结构(存储结构)

    相关 双向队列集合 Deque

    Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque

    相关 Python双向队列 (deque)

    -------------------- 任务描述 本关任务:编写一个能输出“震荡”队列的程序。 双向队列 (deque) 双向队列是一种能在队列两端都进行入队出队操作