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 本征半导体 完全纯净的、结构完整的半导体称为本征半导体。 常用的半导体材料有硅和锗,它们都是四价元素,原子最外层轨道有四个价电子。 若将纯净的半导体制成晶体,则原子形成排列整齐的点阵。 点阵是由共价键提供…...

skimage.filters.apply_hysteresis_threshold详解
本文内容均参考scipy1.9.1scipy1.9.1scipy1.9.1版本的源码,若有任何不当欢迎指出 我们截取官方注释如下: def apply_hysteresis_threshold(image, low, high):"""Apply hysteresis thresholding to image.This algorithm finds regions …...

一、基础算法5:前缀和与差分 模板题+算法模板(前缀和,子矩阵的和,差分,差分矩阵)
文章目录算法模板前缀和模板子矩阵的和模板差分模板差分矩阵模板模板题前缀和原题链接题目题解子矩阵的和原题链接题目题解差分原题链接题目题解差分矩阵原题链接题目题解算法模板 前缀和模板 S[i] a[1] a[2] ... a[i] a[l] ... a[r] S[r] - S[l - 1]子矩阵的和模板 S[i…...

Python矩阵分解之QR分解
文章目录QR和RQ分解其他函数QR和RQ分解 记AAA为方阵,P,QP, QP,Q分别为正交单位阵和上三角阵,则形如AQRAQRAQR的分解为QR分解;形如ARQARQARQ的分解为RQ分解。 在scipy.linalg中,为二者提供了相同的参数,除了待分解矩阵…...

随机森林程序
n_estimators:数值型取值 含义:森林中决策树的个数,默认是10 criterion:字符型取值 含义:采用何种方法度量分裂质量,信息熵或者基尼指数,默认是基尼指数 max_features:取值为int型, float型, string类型…...

每日一练2627——变态跳台阶快到碗里来不用加减乘除做加法三角形
文章目录变态跳台阶思路:代码:快到碗里来思路:代码:不用加减乘除做加法思路:代码:三角形思路:代码:变态跳台阶 题目链接: 思路: 这个题目很容易理解&#…...

LeetCode-146. LRU 缓存
目录LRU理论题目思路代码实现一代码实现二题目来源 146. LRU 缓存 LRU理论 LRU 是 Least Recently Used 的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓…...

#课程笔记# 电路与电子技术基础 课堂笔记 第3章 电路分析的几个定理
3.1 叠加定理 激励:电流源或电压源 响应:电流或电压 叠加定理一般用于已知激励或响应中的一种,求另一种。做法就是,每次只求一个激励作用下的响应,将其他激励置零,置零的具体做法是,电压源变…...

推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计
推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计 目录推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计前言匹配与非匹配1. 基于自适应反步控制的非匹配条件下的系统控制器设计问题描述控制器设计小结2. 基于自适应反步控制和推迟参数设计的非匹配条件…...

spring5.1+SmartInstantiationAwareBeanPostProcessor 解决循环依赖
SmartInstantiationAwareBeanPostProcessor 解决循环依赖的过程, 例如上面的 A依赖B, B依赖A SmartInstantiationAwareBeanPostProcessor 是 Spring 中的一个接口,它扩展了 InstantiationAwareBeanPostProcessor 接口并提供了对 Bean 的实例化和属性填充的更高级的…...

apply、call与bind
共同点: 都是函数对象的一个方法,作用是改变函数执行时的上下文,即改变函数体内部this的指向 var name "lucy"; var obj {name: "martin",say: function () {console.log(this.name);} }; obj.say(); // martin&…...