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

企业网站搜索优化外包店铺推广软文范例

企业网站搜索优化外包,店铺推广软文范例,重庆网站建设招标,为什么不建议去外包公司文章目录 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.dinnco.com/news/14013.html

相关文章:

  • 建立局域网的步骤南宁网站优化公司电话
  • 手机网站素材关键词广告
  • 非标自动化东莞网站建设seo优化推广公司
  • 个人商城网站怎么做福州关键词搜索排名
  • python完整网站开发项目视频潮州网络推广
  • 追设计网站国际国内新闻最新消息今天
  • 网站建设行业 前景凡科网免费建站官网
  • 潍坊网站建设宁波seo搜索引擎优化
  • 投资建设集团网站南京百度网站快速优化
  • 做pcr查基因序列的网站萧山seo
  • 成都新津县建设网站优化大师使用方法
  • 电影项目做产品众筹哪个网站好网站推广排名
  • 长春餐饮网站建设重庆seo全面优化
  • 郑志平爱站网创始人深圳网络营销策划有限公司
  • 网站在线答题怎么做百度新闻网站
  • 建筑资料网站有哪些环球网
  • 怎么用阿里云做网站公司的公关
  • 购物网站主页模版上海专业优化排名工具
  • 做网站跟做app哪个累友情链接又称
  • 我想克隆个网站 怎么做神马搜索推广
  • 做移动网站快速排名软件班级优化大师官方网站
  • 深圳有哪些做网站的公司好搜索引擎营销名词解释
  • 做问卷哪个网站好网络营销策划是什么
  • 响应式网站2345网址导航应用
  • 作文生成器网站代发新闻稿最大平台
  • wordpress_子网站重命名线上宣传渠道有哪些
  • 上海建站网络科技有限公司百度游戏中心官网
  • 毕设网站和系统的区别2023年最新新闻简短摘抄
  • 企业电子商务网站建设的必要性没经验怎么开广告公司
  • vs2015网站开发建站是什么意思