当前位置: 首页 > news >正文

wordpress网页中添加3个音乐播放抖音关键词排名优化软件

wordpress网页中添加3个音乐播放,抖音关键词排名优化软件,政府网站建设与电子政务,网站建设上线流程文章目录 deque的概念deque的使用deque的练习总结 deque的概念 deque(双端队列):是一种序列容器、是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1)&#xff…

文章目录

    • deque的概念
    • deque的使用
    • deque的练习
    • 总结

deque的概念

deque(双端队列):是一种序列容器、是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。
在这里插入图片描述
deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个
动态的二维数组,其底层结构如下图所示:
在这里插入图片描述
双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问
的假象,落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂,如下图所示:
在这里插入图片描述
deque是如何借助其迭代器维护其假想连续的结构
在这里插入图片描述

deque的使用

#include <iostream>
#include <deque>int main() {// 创建一个整数类型的双端队列std::deque<int> myDeque;// 在尾部添加元素myDeque.push_back(10);myDeque.push_back(20);// 在头部添加元素myDeque.push_front(5);// 访问和打印元素std::cout << "Elements in the deque: ";for (const auto& element : myDeque) {std::cout << element << " ";}std::cout << std::endl;// 删除尾部元素myDeque.pop_back();// 删除头部元素myDeque.pop_front();// 再次打印元素std::cout << "Elements after pop operations: ";for (const auto& element : myDeque) {std::cout << element << " ";}std::cout << std::endl;// 通过索引访问元素std::cout << "The first element is: " << myDeque[0] << std::endl;return 0;
}

双端队列的基本操作,包括在两端添加和删除元素、遍历以及随机访问。通过这个例子,可以更好地理解deque容器的特性和用法,为在实际编程中使用双端队列提供了参考。

deque的练习

STL标准库中对于stack和queue的模拟实现
stack

#include<deque>
namespace TU
{template<class T, class Con = deque<T>>class stack{public:stack() {}void push(const T& x) {_c.push_back(x); }void pop() {_c.pop_back(); }T& top() { return _c.back(); }const T& top()const { return _c.back(); }size_t size()const { return _c.size(); }bool empty()const { return _c.empty(); }private:Con _c;};
}

代码实现了一个简单的栈(stack)容器模板类。它使用了 C++ 的模板技术,可以存储不同类型的元素,并可以指定底层容器的类型(默认为deque)。

queue

#include<deque>
namespace TU
{template<class T, class Con = deque<T>>class queue{public:queue() {}void push(const T& x) { _c.push_back(x); }void pop() { _c.pop_front(); }T& back() { return _c.back(); }const T& back()const { return _c.back(); }T& front() { return _c.front(); }const T& front()const { return _c.front(); }size_t size()const { return _c.size(); }bool empty()const { return _c.empty(); }private:Con _c;};
}

代码定义了一个名为queue的类模板,实现了一个简单的队列数据结构。它使用了 C++ 的模板技术,可以存储不同类型的元素,并可以指定底层容器的类型(默认为deque)。这个队列支持基本的队列操作,如入队、出队、获取队首和队尾元素、查询队列大小和判断队列是否为空。

总结

deque的特点
1.两端高效操作

  • deque的主要优势在于可以在其前端和后端快速地插入和删除元素,时间复杂度均为常量级别。这使得它非常适合那些需要在队列两端频繁进行操作的场景,比如实现栈(在一端进行插入和删除)和队列(在两端分别进行插入和删除)的数据结构。

2.动态大小

  • 与其他标准容器一样,deque可以根据需要自动调整其大小以容纳更多或更少的元素。它可以在运行时动态地增长或收缩,无需预先确定其最大容量。

3.随机访问

  • deque支持随机访问元素,就像数组一样。你可以使用下标运算符[]或迭代器在常量时间内访问任意位置的元素。这使得在需要随机访问元素的算法中,deque也能发挥作用。

4.内存布局

  • deque的内部实现通常由多个固定大小的缓冲区组成。这些缓冲区在逻辑上形成一个连续的序列,使得deque看起来像一个连续的容器。当需要在两端进行插入或删除操作时,deque可以根据情况在适当的缓冲区中进行操作,而不必像std::vector那样可能需要整体重新分配内存并移动元素。

deque的缺陷

  • 与vector比较,deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩
    容时,也不需要搬移大量的元素,因此其效率是必vector高的。
  • 与list比较,其底层是连续空间,空间利用率比较高,不需要存储额外字段。
  • 但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。

为什么选择deque作为stack和queue的底层默认容器
stack是一种后进先出的特殊线性数据结构,因此只要具有push_back()和pop_back()操作的线性
结构,都可以作为stack的底层容器,比如vector和list都可以;queue是先进先出的特殊线性数据
结构,只要具有push_back和pop_front操作的线性结构,都可以作为queue的底层容器,比如
list。但是STL中对stack和queue默认选择deque作为其底层容器,主要是因为:

  • stack和queue不需要遍历(因此stack和queue没有迭代器),只需要在固定的一端或者两端进
    行操作。
  • 在stack中元素增长时,deque比vector的效率高(扩容时不需要搬移大量数据);queue中的
    元素增长时,deque不仅效率高,而且内存使用率高。
    结合了deque的优点,而完美的避开了其缺陷。

使用场景
1.实现栈和队列

  • 由于deque可以在两端高效地进行插入和删除操作,它非常适合用来实现栈和队列。例如,可以将元素从deque的一端推入表示入栈操作,从同一端弹出表示出栈操作;将元素从deque的一端推入表示入队操作,从另一端弹出表示出队操作。

2.存储历史记录

  • 可以用deque来存储用户操作的历史记录,允许用户在一定范围内回溯和前进。新的操作可以添加到deque的一端,而当用户回溯时,可以从另一端删除元素。

3.广度优先搜索算法

  • 在图的广度优先搜索算法中,deque可以用来存储待访问的节点。从deque的一端取出节点进行访问,并将其相邻的未访问节点添加到deque的另一端。这样可以保证先访问距离起点较近的节点。
http://www.jinmujx.cn/news/119530.html

相关文章:

  • 网站设计和内容上的不足和建议河北百度seo点击软件
  • 襄阳网站设计制作公司全球十大搜索引擎排名
  • 给网站做优化怎么做游戏加盟
  • 可以做推送的网站seo关键词优化技术
  • 阅读转发网站那些做的比较好seo专业培训
  • 网站的开发和建设有什么区别广告投放渠道有哪些
  • 上海电子通科技网站建设站长工具ping
  • b站直播能禁止id观看吗郑州网站推广报价
  • 科技网站实例百度指数网页版
  • 水利部网站建设管理司百度seo优化规则
  • 网站seo优化的重要性百度网页版下载安装
  • 养老院网站开发背景百度app首页
  • 哪个公司做网站好郑州seo顾问
  • 大型网站开发框架移动前端框架百度小说搜索风云榜
  • 国外做鞋子的网站有哪些广告营销公司
  • Java怎么做网站密码搜狗网站提交入口
  • 建设黑彩网站需要什么广州品牌营销策划公司排名
  • 网站项目书范文艾滋病多久能查出来
  • 京东网页的在线客服在哪里长沙企业关键词优化哪家好
  • 泰国购物网站大全seo网站的优化流程
  • 未成年人做网站seo和sem的区别
  • 翻译国外网站做原创不收费推广网站有哪些
  • 做网站PPPOE网络可以吗谷歌账号注册
  • 中山企业网站建设市场营销七大策略
  • 2013年政府网站建设网上推广产品哪个网好
  • 做网站销售怎么找客户推广普通话手抄报内容资料
  • 企业需求做网站在哪儿交易关键词首页排名优化平台
  • 做农产品交易网站免费代码网站
  • 建站程序企业管理软件管理系统
  • 北京网站公司哪家好外链价格