C++ deque容器
C++ deque容器
文章目录
- C++ deque容器
- 前言
- 1. deque容器基本概念
- 2. deque构造函数
- 3. deque赋值操作
- 4. deque大小操作
- 5. deque 插入和删除
- 6. deque 数据存取
- 7. deque 排序
- 总结
前言
本文包含deque容器基本概念、deque构造函数、deque赋值操作、deque大小操作、deque插入和删除、deque数据存取、deque排序。
1. deque容器基本概念
功能:
双端数组,可以对头端进行插入删除操作
deque与vector区别:
(1)、vector对于头部的插入删除效率低,数据量越大,效率越低
(2)、deque相对而言,对头部的插入删除速度回比vector快
(3)、vector访问元素时的速度会比deque快,这和两者内部实现有关

deque内部工作原理:
(1)、deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
(2)、中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
(3)、deque容器的迭代器也是支持随机访问的

2. deque构造函数
功能描述:
deque容器构造
函数原型:
(1)、deque<T> deqT; 默认构造形式
(2)、deque(beg, end); 构造函数将[beg, end)区间中的元素拷贝给本身
(3)、deque(n, elem); 构造函数将n个elem拷贝给本身
(4)、deque(const deque &deq); 拷贝构造函数
// deque双端数组容器构造函数#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间#include <deque> // 使用deque双端数组容器,需包含头文件deque// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) { // 使用引用方式&,传入deque<int>类型的形参d// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型// const_iterator只读迭代器;iterator普通迭代器for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值cout << *it << " "; // it是个迭代器类型,本是是个指针,需使用*解引用}cout << endl;
}void test() {// 1、默认构造方式,无参构造deque<int> d;for (int i = 0; i < 10; i++){// push_back()向容器尾部插入数据id.push_back(i);}Fun_Print(d); // 0 1 2 3 4 5 6 7 8 9// 2、将d容器开始迭代器到结束迭代器之间的数据元素,拷贝给d1容器deque<int> d1(d.begin(), d.end());Fun_Print(d1); // 0 1 2 3 4 5 6 7 8 9// 3、将10个100拷贝给d2容器deque<int> d2(10, 100);Fun_Print(d2); // 100 100 100 100 100 100 100 100 100 100// 4、拷贝构造deque<int> d3(d2);Fun_Print(d3); // 100 100 100 100 100 100 100 100 100 100
}int main() {test();system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果return 0; // 程序正常退出
}

3. deque赋值操作
功能描述:
给deque容器进行赋值
函数原型:
(1)、deque& operator=(const deque &deq); 重载等号操作符
(2)、assign(beg, end); 将[beg, end)区间中的数据拷贝赋值给本身
(3)、assign(n, elem); 将n个elem拷贝赋值给本身
// deque双端数组容器赋值#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间#include <deque> // 使用deque双端数组容器,需包含头文件deque// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) { // 使用引用方式&,传入deque<int>类型的形参d// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型// const_iterator只读迭代器;iterator普通迭代器for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值cout << *it << " "; // it是个迭代器类型,本是是个指针,需使用*解引用}cout << endl;
}void test() {// 创建deque容器对象,并且通过模板参数指定容器中存放的数据的类型deque<int> d;for (int i = 0; i < 10; i++){// push_back()向容器尾部插入数据id.push_back(i);}Fun_Print(d); // 0 1 2 3 4 5 6 7 8 9// 1、重载operator=deque<int> d1;d1 = d;Fun_Print(d1); // 0 1 2 3 4 5 6 7 8 9// 2、将d容器开始迭代器到结束迭代器之间的数据元素,赋值给d2容器deque<int> d2;d2.assign(d.begin(), d.end());Fun_Print(d2); // 0 1 2 3 4 5 6 7 8 9// 3、将10个100赋值给d3deque<int> d3;d3.assign(10, 100);Fun_Print(d3); // 100 100 100 100 100 100 100 100 100 100
}int main() {test();system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果return 0; // 程序正常退出
}

4. deque大小操作
功能描述:
对deque容器的大小进行操作 (没有容量,可以无限扩展)
函数原型:
(1)、deque.empty(); 判断容器是否为空
(2)、deque.size(); 返回容器中元素的个数
(3)、deque.resize(num);
3.1)、重新指定容器的长度为num,若容器变长,则以默认值填充新位置 (默认填充0)
3.2)、如果容器变短,则末尾超出容器长度的元素被删除
(4)、deque.resize(num, elem);
4.1)、重新指定容器的长度为num,若容器变长,则以elem值填充新位置 (填充elem)
4.2)、如果容器变短,则末尾超出容器长度的元素被删除
// deque双端数组容器大小操作#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间#include <deque> // 使用deque双端数组容器,需包含头文件deque// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) { // 使用引用方式&,传入deque<int>类型的形参d// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型// const_iterator只读迭代器;iterator普通迭代器for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值cout << *it << " "; // it是个迭代器类型,本是是个指针,需使用*解引用}cout << endl;
}void test() {// 创建deque容器对象,并且通过模板参数指定容器中存放的数据的类型deque<int> d;for (int i = 0; i < 10; i++){// push_back()向容器尾部插入数据id.push_back(i);}Fun_Print(d); // 0 1 2 3 4 5 6 7 8 9// 1、empty()判断容器是否为空,返回真,则为空if (d.empty()) {cout << "d容器为空!" << endl;}else {cout << "d容器不为空!" << endl;// 2、size()返回容器数据元素个数cout << "d容器个数为:" << d.size() << endl; // 10}// 3.1、resize()指定容器长度为15,默认填充0d.resize(15);Fun_Print(d); // 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0// 3.2、resize()指定容器长度为5,删除超出容器长度的数据元素d.resize(5);Fun_Print(d); // 0 1 2 3 4// 4.1、resize()指定容器长度为10,默认填充10d.resize(10, 10);Fun_Print(d); // 0 1 2 3 4 10 10 10 10 10// 4.2、resize()指定容器长度为5,删除超出容器长度的数据元素d.resize(5, 5);Fun_Print(d); // 0 1 2 3 4
}int main() {test();system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果return 0; // 程序正常退出
}

5. deque 插入和删除
功能描述:
向deque容器中插入和删除数据
函数原型:
(1)、两端插入操作:
push_back(elem); 在容器尾部添加一个数据
push_front(elem); 在容器头部插入一个数据
pop_back(); 删除容器最后一个数据
pop_front(); 删除容器第一个数据
// deque双端数组容器插入#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间#include <deque> // 使用deque双端数组容器,需包含头文件deque// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) { // 使用引用方式&,传入deque<int>类型的形参d// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型// const_iterator只读迭代器;iterator普通迭代器for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值cout << *it << " "; // it是个迭代器类型,本是是个指针,需使用*解引用}cout << endl;
}void test() {// 创建deque容器对象,并且通过模板参数指定容器中存放的数据的类型deque<int> d;// 1、push_back()向容器尾部插入数据1、2d.push_back(1);d.push_back(2);Fun_Print(d); // 1 2// 2、push_front()向容器头部插入数据3、4d.push_front(3);d.push_front(4);Fun_Print(d); // 4 3 1 2// 3、pop_back()删除容器最后一个数据d.pop_back();Fun_Print(d); // 4 3 1 // 4、pop_front()删除容器第一个数据d.pop_front();Fun_Print(d); // 3 1
}int main() {test();system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果return 0; // 程序正常退出
}

(2)、指定位置操作:
insert(pos,elem); 在pos位置插入一个elem元素的拷贝,返回新数据的位置
insert(pos,n,elem); 在pos位置插入n个elem数据,无返回值
insert(pos,beg,end); 在pos位置插入[beg,end)区间的数据,无返回值
erase(beg,end); 删除[beg,end)区间的数据,返回下一个数据的位置
erase(pos); 删除pos位置的数据,返回下一个数据的位置
clear(); 清空容器的所有数据
// deque双端数组容器插入和删除#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间#include <deque> // 使用deque双端数组容器,需包含头文件deque// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) { // 使用引用方式&,传入deque<int>类型的形参d// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型// const_iterator只读迭代器;iterator普通迭代器for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值cout << *it << " "; // it是个迭代器类型,本是是个指针,需使用*解引用}cout << endl;
}void test() {// 创建deque容器对象,并且通过模板参数指定容器中存放的数据的类型deque<int> d;// 1、insert()在容器开始迭代器处插入数据10d.insert(d.begin(), 10);Fun_Print(d); // 10// 2、insert()在容器结束迭代器处插入5个10d.insert(d.end(), 5, 100);Fun_Print(d); // 10 100 100 100 100 100// 3、insert()在容器结束迭代器处,插入d容器开始迭代器到结束迭代器中的数据元素d.insert(d.end(), d.begin(), d.end());Fun_Print(d); // 10 100 100 100 100 100 10 100 100 100 100 100deque<int>::iterator it = d.begin(); // 创建一个迭代器itit += 6; // 使it位置为6// 4、erase()按区间删除数据元素,从第6个迭代器位置开始,删除d容器之后所有数据元素d.erase(it, d.end());Fun_Print(d); // 10 100 100 100 100 100// 5、erase()删除d容器开始迭代器的数据元素d.erase(d.begin());Fun_Print(d); // 100 100 100 100 100// 6、clear()清空容器所有数据元素d.clear();Fun_Print(d); //
}int main() {test();system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果return 0; // 程序正常退出
}

6. deque 数据存取
功能描述:
对deque 中的数据的存取操作
函数原型:
(1)、at(int idx); 返回索引idx所指的数据
(2)、operator[]; 返回下标idx所指的数据
(3)、front(); 返回容器中第一个数据元素
(4)、back(); 返回容器中最后一个数据元素
// deque双端数组容器数据存取#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间#include <deque> // 使用deque双端数组容器,需包含头文件dequevoid test() {// 创建deque容器对象,并且通过模板参数指定容器中存放的数据的类型deque<int> d;for (int i = 0; i < 10; i++){// push_back()向容器尾部插入数据id.push_back(i);}// 1、at()返回容器索引i所指的数据元素for (int i = 0; i < d.size(); i++) { // size()返回容器数据元素个数cout << d.at(i) << " "; // 0 1 2 3 4 5 6 7 8 9}cout << endl;// 2、[]返回容器下标i所指的数据元素for (int i = 0; i < d.size(); i++) {cout << d[i] << " "; // 0 1 2 3 4 5 6 7 8 9}cout << endl;// 3、front()返回容器的第一个数据元素cout << "d容器的第一个数据元素为:" << d.front() << endl; // 0// 4、front()返回容器的最后一个数据元素cout << "d容器的最后一个数据元素为:" << d.back() << endl; // 9
}int main() {test();system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果return 0; // 程序正常退出
}

7. deque 排序
功能描述:
利用算法实现对deque容器进行排序
算法:
sort(iterator beg, iterator end) 对beg和end区间内元素进行排序
// deque双端数组容器排序#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间#include <deque> // 使用deque双端数组容器,需包含头文件deque
#include <algorithm> // 标准算法头文件;使用sort,需包含头文件algorithm// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) { // 使用引用方式&,传入deque<int>类型的形参d// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型// const_iterator只读迭代器;iterator普通迭代器for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值cout << *it << " "; // it是个迭代器类型,本是是个指针,需使用*解引用}cout << endl;
}void test() {// 创建deque容器对象,并且通过模板参数指定容器中存放的数据的类型deque<int> d;// push_back()向容器尾部插入数据d.push_back(80);d.push_back(20);d.push_back(40);d.push_front(10);d.push_front(90);d.push_front(50);Fun_Print(d); // 50 90 10 80 20 40// sort()排序;默认排序规则,从小到大,升序// 对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序;vector容器也可以利用sort进行排序sort(d.begin(), d.end());Fun_Print(d); // 10 20 40 50 80 90
}int main() {test();system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果return 0; // 程序正常退出
}

总结
(1)、deque 容器和 vector 容器的构造方式几乎一致,灵活使用即可;
(2)、deque 赋值操作也与 vector 相同;
(3)、deque 没有容量的概念;
(4)、deque 判断是否为空 — empty;
(5)、deque 返回元素个数 — size;
(6)、deque 重新指定个数 — resize;
(7)、deque 插入和删除提供的位置是迭代器!
(8)、deque尾插 — push_back;
(9)、deque 尾删 — pop_back;
(10)、deque 头插 — push_front;
(11)、deque 头删 — pop_front;
(12)、除了用迭代器获取deque容器中元素,[ ]和at也可以;
(13)、front() 返回容器第一个元素;
(14)、back() 返回容器最后一个元素;
(15)、sort() 算法非常实用,使用时包含头文件 algorithm即可。
相关文章:
C++ deque容器
C deque容器 文章目录C deque容器前言1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque 插入和删除6. deque 数据存取7. deque 排序总结前言 本文包含deque容器基本概念、deque构造函数、deque赋值操作、deque大小操作、deque插入和删除、deque…...
HashMap的底层原理
hashmap是一个以key,value形式存储的集合,在JDK1.7中是以数组链表的数据结构,在JDK1.8中是数组链表红黑树的数据结构,他在对数据操作时继承了数组的线性查找和链表的寻址修改 hashmap是线程不安全的 : 在JDK1.7中会造成环形链和数据丢失的情况 在JDK1.8中hashmap的put过程会造…...
Django 4.0文档学习(四)
上篇文章 Django 4.0文档学习(四) 文章目录编写你的第一个 Django 应用,第 6 部分自定义应用的界面和风格编写你的第一个 Django 应用,第 7 部分自定义后台表单自定义后台更改列表自定义后台界面和风格自定义后台主页编写你的第一…...
2023年全国最新高校辅导员精选真题及答案38
百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 112.为改变重知识传授轻能力培养的大学课堂,教学方法可以采用(&am…...
和ChatGPT-4聊完后,我觉得一切可能已经来不及了
了然无味,晴空万里!和ChatGPT-4开始了一场坦诚的沟通,它全程都表现出高情商,以及不断尽量安抚我的情绪,而这,恰恰令我脊背发凉。 部分文字截取 ZM:我能不能理解每次对话就是一次你的“生命” G&…...
RocketMQ 5.1 NameServer 启动流程
文章目录1 解析命令行参数和配置文件2 创建并启动 NamesrvController2.1 创建 NamesrvController 对象2.2 启动 NamesrvController 对象第一步:初始化 controller第二步:注册 JVM 钩子第二步:启动 controllerRocketMQ是一个分布式消息中间件&…...
马云回国,首谈ChatGPT
马云今天回国了,这是一个备受关注的消息。 作为中国最具代表性的企业家之一,马云在过去的二十多年里,带领阿里巴巴从一个小小的创业公司,发展成为全球最大的电商平台之一,同时也推动了中国互联网行业的发展。 他的回…...
深入理解C++迭代器:让你的C++代码更加灵活
C迭代器:更加优雅的容器操作方式引言C迭代器简介a. 迭代器的定义b. 迭代器的作用c. 迭代器与指针的区别迭代器分类a. 输入迭代器(Input Iterator)b. 输出迭代器(Output Iterator)c. 前向迭代器(Forward Ite…...
Java 读取Excel模板中的数据到实体类
目录一. 前提条件1.1 需求1.2 分析二. 准备2.1 自定义注解2.2 封装Excel的实体类三. 前台四. Controller层五. Service层💪💪💪六. 效果一. 前提条件 1.1 需求 从指定的Excel模板中读取数据,将读取到的数据存储到数据库中。 1.2…...
【java基础】Socket网络编程
文章目录说明InetAddress介绍Socket介绍ServerSocket介绍实现简单的Socket通信总结说明 这里介绍下如何在java里面进行socket编程 InetAddress介绍 这个类表示一个Internet协议(IP)地址,我们可以通过ip或者主机名来构建这个类 Testpublic void t1() throws Except…...
转发和重定向区别
转发和重定向 1.0 面试提问 定义不同跳转的方式不同数据共享不同最终的URL地址不同代码实现不同 1. 转发 1.1 概念 转发实际上在服务器端进行页面的跳转操作,请求转发:一种在服务器内部的资源的跳转的方式。 访问A,A请求转发了B,…...
java面试题(持续更新)
java面试题(持续更新) java 基础 java面向对象有哪些特征 面向对象的三大特征:封装、继承、多态 封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据,…...
【花雕学AI】09:发挥ChatGPT最大潜力——产生高质量内容的九种方法和建议
人工智能(AI)是当今科技领域最热门和最有前景的话题之一,它已经渗透到了我们生活和工作的方方面面,给我们带来了许多便利和惊喜。而在AI的众多分支中,自然语言处理(NLP)是最贴近人类的一个领域&…...
实战打靶集锦-013-Loly
**写在前面:**记录博主的一次打靶经历 目录1. 主机发现2. 端口扫描3. 服务枚举4. web服务探查4.1 WordPress探测4.2 使用metasploit4.3 使用wpscan4.4 阶段性回顾5. 提权5.1 弱密码提权5.2 操作系统信息枚举5.3 定时任务枚举5.4 passwd信息枚举5.5 可执行文件枚举5.…...
程序员OKR学习法
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl OKR管理法 OKR(Objectives and Key Results)管理法是一种目标管理方法,旨在通过制定明确的目标和可量化的关键结果来帮助组织、团队和个人…...
【从零开始学习 UVM】6.6、UVM 激励产生 —— UVM Virtual Sequence【重要】
文章目录 使用virtual sequencer不使用virtual sequencervirtual sequence是一个容器,用于在环境中的virtual sequencer上启动多个sequence。 这个virtual sequence通常由一个具有对真实sequencers句柄的virtual sequencers执行。 需要virtual sequence的原因是当您需要在不…...
蓝桥杯:阶乘约数
蓝桥杯:阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题:答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有…...
最大数字
[蓝桥杯 2022 国 B] 最大数字 题目描述 给定一个正整数 NNN。你可以对 NNN 的任意一位数字执行任意次以下 2 种操作: 将该位数字加 111。如果该位数字已经是 999,加 111 之后变成 000。 将该位数字减 111。如果该位数字已经是 000,减 111 之后变成 99…...
【java进阶08:异常】finally关键字、自定义异常类、用户业务作业、军队武器作业
java中的异常处理机制 异常在java中以类和对象的形式存在,那么异常的继承结构是怎样的?我们可以使用UML图来描述以下继承结构 画UML图的工具:Rational Rose、starUML等 Object下有Throwable(可抛出的) Throwable下有两…...
#课程笔记# 电路与电子技术基础 课堂笔记 第6章 半导体器件的基本特性
6.1 半导体基础知识 6.1.1 本征半导体 完全纯净的、结构完整的半导体称为本征半导体。 常用的半导体材料有硅和锗,它们都是四价元素,原子最外层轨道有四个价电子。 若将纯净的半导体制成晶体,则原子形成排列整齐的点阵。 点阵是由共价键提供…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
