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

10.queue的模拟实现

一.适配器讲解

可维护性

设计模式

适配器模式 -- 封装转换

迭代器模式 -- 封装统一访问方式(数据结构访问都可以用)

C语言做这个过程只是太过麻烦,而不是不可以

下面是用C语言实现成员函数(C语言中,struct是没有成员函数的)

void PushBack(int x)
{printf("void PushBack(int x)\n");
}// C
struct Vector
{void(*push_back)(int);int* _a;int _size;int _capacity;
};void Init(struct Vector* pv)
{pv->push_back = PushBack;//...
}int main()
{Vector v;Init(&v);v.push_back(1);v.push_back(2);return 0;
}

二.queue的实现

#pragma once
#include<vector>
#include<list>
#include<deque>using namespace std;namespace ltw
{// deque list// 不支持vector(vector没有直接支持头删(效率太低了))template<class T, class Container = deque<T>>class queue{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_front();// 这样就可以支持vector了,但是效率就很低了//_con.erase(_con.begin());}const T& back(){return _con.back();}const T& front(){return _con.front();}bool empty(){return _con.empty();}size_t size(){_con.size();}private:Container _con;};
}

queue的实现,是不建议使用vector进行当作适配器的

测试代码:

void test_queue()
{ltw::queue<int> q;//ltw::queue<int,list<int>> q;// 不支持//ltw::queue<int, vector<int>> q;q.push(1);q.push(2);q.push(3);q.push(4);while (!q.empty()){cout << q.front() << " ";q.pop();}cout << endl;
}

只能说是,任何容器(逻辑差不多的容器)都能通过特定的方式被当作适配器,但是效率不同

三.stack和queue的默认适配容器(deque)

1.deque的成员函数等

从功能上,我们都基本上都清楚了

2.vector,list和deque的优劣分析

deque就相当于是vector和list的结合体

deque的[]访问的效率不如vector,insert的效率不如list

3.测试代码(了解即可):

测试vector和deque排序(全是[]访问):

void test_op1()
{srand(time(0));const int N = 1000000;deque<int> dq;vector<int> v;for (int i = 0; i < N; ++i){auto e = rand() + i;v.push_back(e);dq.push_back(e);}int begin1 = clock();sort(v.begin(), v.end());int end1 = clock();int begin2 = clock();sort(dq.begin(), dq.end());int end2 = clock();printf("vector:%d\n", end1 - begin1);printf("deque:%d\n", end2 - begin2);
}

让vector进行排序,排完再拷贝回去:

void test_op2()
{srand(time(0));const int N = 1000000;deque<int> dq1;deque<int> dq2;for (int i = 0; i < N; ++i){auto e = rand() + i;dq1.push_back(e);dq2.push_back(e);}int begin1 = clock();sort(dq1.begin(), dq1.end());int end1 = clock();int begin2 = clock();// 拷贝到vectorvector<int> v(dq2.begin(), dq2.end());sort(v.begin(), v.end());dq2.assign(v.begin(), v.end());int end2 = clock();printf("deque sort:%d\n", end1 - begin1);printf("deque copy vector sort, copy back deque:%d\n", end2 - begin2);
}

http://www.dtcms.com/a/495382.html

相关文章:

  • 有多少网站可以推广业务阿里云个人网站建设
  • 【知识点总结】Vue2 与 Vue2 区别
  • 【CV】神经网络中哪些参数需要被学习?
  • Spring两大漏洞可导致泄露敏感信息及安全防护绕过(CVE-2025-41253/41254)
  • 了解一个文件签名验证工具——sigverif
  • 河北建筑网站江小白网络营销案例
  • 张家口网站建设开发网站开发案例教程
  • 【NestJS】class-transformer什么用
  • 【word多文档docx合并】
  • Endnote | word中加载项消失不见,如何处理?
  • 聊聊 Unity(小白专享、C# 小程序 之 图片播放器)
  • 查询个人房产信息网站查看wordpress密码破解
  • 做网站用什么框架dede淘宝客网站
  • 高级篇:Python脚本(101-150)
  • pdf解析工具---Miner-u 本地部署记录
  • 怎么快速做网站文章新乡个人网站建设价格
  • 关于.net网站开发外文书籍wordpress子标题
  • 基于OpenIddict6.4.0搭建授权认证服务
  • 中国建设银行网站企业北京网站维护一般价格多少
  • shell编程语言---正则表达式,grep
  • JoyAgent问数多表关联Bug修复
  • 网站建设投标书报价表高端网站设计思路
  • 【玩泰山派】8、泰山派安装armbian,玩armbian
  • 雄安建设集团 网站推荐个在广州做网站的
  • vue3加载shp文件 并地图上展示
  • 实战:用PyTorch构建你的第一个图像分类CNN模型
  • 淄博网站建设优化公司wordpress后台登录网址
  • 每日一个网络知识点:网络层NAT
  • 不花钱网站怎么做推广小程序同步wordpress
  • 哈尔滨站建好了吗做网站机构图用什么工具