Day08 C++STL入门基础知识五——vector容器(下) 插入删除-数据存取-交换容器-预留空间【全面深度剖析+例题代码展示】
More haste, less speed. 欲速则不达
文章目录
- 1. 承接上文
- 2. 插入操作
- 2.1 函数原型(总括)
- 2.2 尾插尾删
- 2.2.1 操作
- 2.2.2 代码展示
- 2.2.3 测试结果
- 2.3 迭代器插入
- 2.3.1 操作
- 2.3.2 代码展示
- 2.3.3 测试结果
- 2.4 think小思考
- 2.4.1 小疑问
- 2.4.2 思路
- 2.4.3 代码展示
- 2.4.4 测试结果
- 3. 删除操作
- 3.1 函数原型
- 3.2 代码展示
- 3.3 测试结果
- 4. 数据存取
- 4.1 函数原型(总括)
- 4.2 `[ ]访问`
- 4.2.1 操作
- 4.2.2 代码展示
- 4.3 测试结果
- 4.3 `at访问`
- 4.3.1 操作
- 4.3.2 代码展示
- 4.3.3 测试结果
- 4.4 `front()与back()`
- 4.4.1 操作
- 4.4.2 代码展示
- 4.4.3 测试结果
- 5. 互换容器
- 5.1 函数原型
- 5.2 基本使用
- 5.2.1 代码展示
- 5.2.2 测试结果
- 5.3 实际用途
- 5.3.1 操作
- 5.3.2 代码展示
- 5.3.3 图解
- 5.3.4 测试结果
- 6. 预留空间
- 6.1 功能描述
- 6.2 函数原型
- 6.3 抛砖引玉
- 6.3.1 引出一个小问题
- 6.3.2 思路
- 6.3.3 代码展示
- 6.3.4 结果展示
- 6.4 `reserve()`
- 6.4.1 操作
- 6.4.2 代码展示(接6.3的小问题)
- 6.4.3 测试结果
- 6.4.4 总结
- 7. 胜利的歌我要再唱一遍!!!
- 明日计划
- 8. Mamba Out!——2023.01.26致敬传奇
- "在我的字典里没有认输"
1. 承接上文
本文为vector容器
下篇,会讲到插入-删除-数据存取-交换容器-预留空间5部分,废话少说,开始!
上一篇在这捏👉👉👉http://t.csdn.cn/842oC
2. 插入操作
2.1 函数原型(总括)
push_back(ele);
尾部插入元素elepop_back()
删除最后一个元素insert(const_iterator pos, ele);
迭代器指向位置pos插入元素eleinsert(const_iterator pos, int count, ele);
迭代器指向pos位置pos插入count个元素ele
2.2 尾插尾删
2.2.1 操作
push_back(ele);
尾部插入元素elepop_back()
删除最后一个元素- 直接使用
push_back
和pop_back
即可
2.2.2 代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
//vector容器插入和删除
void vectorPrint(vector<int> v) {for (auto &p : v) {cout << p << " ";}cout << endl;
}
void text01() {vector<int> v;//尾部插入v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);//遍历打印vectorPrint(v);//尾部删除v.pop_back();vectorPrint(v);
}
int main(){text01();return 0;
}
2.2.3 测试结果
2.3 迭代器插入
2.3.1 操作
insert(const_iterator pos, ele);
迭代器指向位置pos插入元素ele- 使用迭代器插入时,【第一个参数为迭代器,第二个为插入值】
insert(const_iterator pos, int count, ele);
迭代器指向pos位置pos插入count个元素ele- 当为重载版本时,可以在迭代器指定位置插入多个相同的值
2.3.2 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
//vector容器插入和删除
void vectorPrint(vector<int> v) {for (auto &p : v) {cout << p << " ";}cout << endl;
}
void text01() {vector<int> v;//尾部插入v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);//遍历打印vectorPrint(v);//尾部删除v.pop_back();vectorPrint(v);//使用迭代器插入【第一个参数为迭代器,第二个为插入值】v.insert(v.begin(), 100);cout << "在开头插入100后:";vectorPrint(v);//重载版本可以在迭代器指定位置插入多个相同的值v.insert(v.begin(), 3, 200);cout << "在开头插入3个200后:";vectorPrint(v);}int main() {text01();return 0;
}
2.3.3 测试结果
2.4 think小思考
2.4.1 小疑问
既然会学尾插和迭代器插入了,但这只能是在头部或尾部进行插入,那怎么样才能在中间的某一位置实现插入呢???
2.4.2 思路
其实我们可以提过对迭代器的移动来选择插入的位置【迭代器的±意为着指针的移动,所以可以进行位置的移动】
2.4.3 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
//vector容器插入
void vectorPrint(vector<int> v) {for (auto &p : v) {cout << p << " ";}cout << endl;
}
void text01() {vector<int> v;//尾部插入v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);//遍历打印vectorPrint(v);//尾部删除v.pop_back();vectorPrint(v);//使用迭代器插入【第一个参数为迭代器,第二个为插入值】v.insert(v.begin(), 100);cout << "在开头插入100后:";vectorPrint(v);//重载版本可以在迭代器指定位置插入多个相同的值v.insert(v.begin(), 3, 200);cout << "在开头插入3个200后:";vectorPrint(v);v.insert(v.begin() + 3, 99);cout << "在第3个元素后插入一个99: ";vectorPrint(v);v.insert(v.begin() + 2, 3, 520);cout << "在第2个元素后插入3个520: ";vectorPrint(v);}int main() {text01();return 0;
}
2.4.4 测试结果
3. 删除操作
3.1 函数原型
erase(const_iterator pos);
删除迭代器所指向的元素erase(const_iterator start, const_iterator end);
删除迭代器从start到end之间的元素erase(const_iterator start+pos, const_iterator end);
删除迭代器从pos到end之间的元素clear();
删除容器中所有元素
3.2 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
//删除
void text02() {vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);//尾删v.pop_back();cout << "尾删完之后:";vectorPrint(v);//删除v.erase(v.begin()+2, v.end());cout << "保留前两个数: ";vectorPrint(v);//clear清空v.clear();cout << "清空后:";vectorPrint(v);}
int main() {text01();text02();return 0;
}
3.3 测试结果
4. 数据存取
4.1 函数原型(总括)
at(int idx);
返回索引idx所指的数据operator[ ];
返回索引idx所知的数据front();
返回容器中的第一个数据元素back();
返回容器中最后一个数据元素
4.2 [ ]访问
4.2.1 操作
at(int idx);
返回索引idx所指的数据
4.2.2 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void text03() {vector<int> v;for (int i = 0; i < 10; i++) {v.push_back(i);}//利用[ ]访问for (int i = 0; i < 10; i++) {cout << v[i] << " ";}cout << endl;
}
int main(){text03();
}
4.3 测试结果
4.3 at访问
4.3.1 操作
operator[ ];
返回索引idx所知的数据
4.3.2 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void text04() {vector<int> v;for (int i = 0; i < 10; i++) {v.push_back(i);}for (int i = 0; i < 10; i++) {cout << v.at(i) << " ";}cout << endl;
}
int main() {text04();return 0;
}
4.3.3 测试结果
4.4 front()与back()
4.4.1 操作
front();
返回容器中的第一个数据元素back();
返回容器中最后一个数据元素
v.front()
和之前讲的v.begin()
、v.back()
和v.end()
有什么区别呢???
答案是front()
和back()
指的是第一个和最后一个的数值,而begin()
和end()
是第一个元素和最后一个元素的地址,供迭代器访问。
4.4.2 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void text05() {vector<int> v;for (int i = 0; i < 10; i++) {v.push_back(i);}cout << "第一个元素为:" << v.front() << endl;cout << "最后一个元素为:" << v.back() << endl;cout << endl;
}
int main() {text05();return 0;
}
4.4.3 测试结果
5. 互换容器
5.1 函数原型
swap(vec);
将vec与本身元素互换
5.2 基本使用
5.2.1 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void text06() {vector<int> v1;cout << "交换前:" << endl;for(int i=0;i<10;i++){v1.push_back(i);}cout << "v1=";vectorPrint(v1);vector<int> v2;for (int i = 9; i >= 0; i--) {v2.push_back(i);}cout << "v2=";vectorPrint(v2);cout << "交换后:" << endl;v1.swap(v2);cout << "v1=";vectorPrint(v1);cout << "v2=";vectorPrint(v2);
}int main() {text06();return 0;
}
5.2.2 测试结果
5.3 实际用途
- 巧用swap可以收缩内存空间
5.3.1 操作
vector<int> (v)
指的是匿名对象【相当于拷贝构造函数创建了个新的对象,只是没有给新对象的名称而已】vector<int> (v)
匿名对象会按照v的目前所有的元素个数来初始化容量和大小vector<int> (v).swap(v);
swap将匿名对象和v地址进行互换,使指针指向新的对象(匿名对象)- 交换后的匿名对象存有大量浪费的空间,我们不用担心,系统会自动回收的
5.3.2 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
//实际用途
void text07() {vector<int> v;for (int i = 0; i < 10000; i++) {v.push_back(i);}int cap=v.capacity();int size = v.size();cout << "v的容量为:" << cap << endl;cout << "v的大小为:" << size << endl;v.resize(8);cap = v.capacity();size = v.size();cout << "v的容量为:" << cap << endl;cout << "v的大小为:" << size << endl;//巧用swap收缩内存vector<int>(v).swap(v);cap = v.capacity();size = v.size();cout << "v的容量为:" << cap << endl;cout << "v的大小为:" << size << endl;
}int main() {text07();return 0;
}
5.3.3 图解
5.3.4 测试结果
6. 预留空间
6.1 功能描述
- 减少vector在动态扩容时的扩展次数
- 【 动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间】
6.2 函数原型
reserve(int len);
容器预留len个元素,预留位置不初始化,元素不可访问
6.3 抛砖引玉
6.3.1 引出一个小问题
通过上节,我们都知道存入数据时,当超过容器的内存空间时,系统会动态扩展,即自动释放原来的内存空间,重新开辟一个更大的内存空间来供存储。但假如我们要存储十万个数,我们该如何知道系统一共开辟多少次呢???
6.3.2 思路
- First
我们要想知道统计多少次,就要弄清楚每次开辟新空间,变化了什么,我们只需要找到发生变化的次数,即为重新开辟空间的次数。
- Second
我们继续思考,那每次开辟内存空间,什么发生变化了呢??不妨思考开辟内存的本质——因为不能保证原有内存物理地址紧跟的空间是有效的,可能被其他东西占用,所以内置程序是重新开辟空间。所以,先释放掉旧内存,申请开辟一块新的内存空间,貌似是内存空间的地址发生了改变!!!
- Third
弄清楚是地址发生改变,一切都好说了,我们只需要定义一个指针p,让p指向开辟的内存空间的首地址,只要p不再等于该内存的首地址了,说明p啊外面已经有人了,不想要你了,那么sum++;最后输出sum即可。
6.3.3 代码展示
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void text08() {//预留空间vector<int> v;int num = 0, *p=NULL;for (int i = 0; i < 100000; i++) {v.push_back(i);if (p != &v[0]) { // 由于v是个对象,不是数组,所以不能直接写p!=v[0],需要加&。写成&v.at(0)也是一样的;p = &v[0];num++;}}cout << num<<endl;
}int main() {text08();return 0;
}
6.3.4 结果展示
6.4 reserve()
6.4.1 操作
- 利用reserve来预留空间
6.4.2 代码展示(接6.3的小问题)
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void text08() {//预留空间vector<int> v;v.reserve(100000); //直接预留一个100000的空间int num = 0, *p=NULL;for (int i = 0; i < 100000; i++) {v.push_back(i);if (p != &v[0]) { // 由于v是个对象,不是数组,所以不能直接写p!=v[0],需要加&。写成&v.at(0)也是一样的;p = &v[0];num++;}}cout << num<<endl;
}int main() {text08();return 0;
}
6.4.3 测试结果
6.4.4 总结
如果本身存取的数据就比较大,可以先使用reserve预留出内存空间,进而减少容器动态扩容时的扩展次数
7. 胜利的歌我要再唱一遍!!!
明日计划
- 线代 第一章练习题搞完
- 蓝桥杯题*5
- deque、stack、queue容器
- 挑战杯开始搞起来了QAQ(谁家大学班主任还让班长组织强制出项目欸,项目时间还提前了俩月(一开始说4月中旬,年前又跟我说改为2月中旬,可我都和小组员们商量好了)【痛苦jpg】(况且亮亮我才大一捏😢))
- 高代有时间的话往下学点,估计是没了
8. Mamba Out!——2023.01.26致敬传奇
“在我的字典里没有认输”
最后,感谢大家支持!
相关文章:
在word文档中全部的文字出现了灰色背景,而且有中括号括起。
这是使用“批注”功能来限制文档修改的典型表现,消除方法: 单击“工具 → 取消保护文档” 先勾选“仅允许在文档中进行此类编辑”前的勾再取消掉, 在弹出的对话框中选择“是”, 这样灰色方括号就去掉了。 如果不知道解除保护密码,可以新建一个文档,通过 插入 → 文件 的方…...
git强行拉取远程到本地并覆盖本地
git fetch --all git reset --hard origin/main步骤解释如下:git fetch --all:这个命令会从远程仓库获取所有分支的最新状态,但不会自动合并到当前工作目录。git reset --hard origin/main:这个命令会将本地仓库重置到远程仓库的main分支的最新状态。这里的origin/main指的…...
Obsidian 使用 ddnsto 穿透 nas 的 webdav 功能实现跨平台同步_obsidian nas 同步
CSDN搬家失败,手动导出markdown后再导入博客园之前一直用坚果云的 webdav 功能做 obsidian 的跨平台同步(Windows,Ubuntu,iOS),但是今天在新的工作机上部署 obsidian 时,发现一次同步的文件数量超过了坚果云的限制(付费用户好像是 500 次),因此想换个平台来考虑。 备…...
JS测试文章
目录1. HOOK1.1. 直接替换函数1.2. 为对象的属性赋值的方式2. chrome控制台3. 函数3.1. 箭头函数3.2. arguments 对象4. 对象4.1. 原型继承4.2. 访问对象内的方法:4.3. 对象构造器函数4.4. 内建构造器4.5. 内建构造器的省略写法4.6. JSON对象4.7. JSON VS XML 1. HOOK原理: J…...
P1064 [NOIP2006 提高组] 金明的预算方案 题解
分析 每一套物品有主件和附件,主件可以单独购买,附件只能和主件一起买。所以,每一套物品有四种买法:主件、主件和附件1、主件和附件2、主件和所有附件。 \(dp_j=\max(dp_j,dp_{j-v_{i_1}}+w_{i_1},dp_{j-v_{i_1}-v_{i_2}}+w_{i_1}+w_{i_2},dp_{j-v_{i_1}-v_{i_3}}+w_{i_1}+…...
在Linux中,如何实现DevOps文化?
实现DevOps文化在Linux环境中涉及多个方面,包括技术实践、工具选择、流程改进以及组织文化的转型。以下是一些关键步骤和策略: 1. 理解DevOps的核心价值观团队合作:打破开发、测试和运维之间的壁垒,促进跨功能团队的紧密合作。 持续交付:通过自动化构建、测试和部署流程,…...
Day08 C++STL入门基础知识五——vector容器(下) 插入删除-数据存取-交换容器-预留空间【全面深度剖析+例题代码展示】
More haste, less speed. 欲速则不达 文章目录1. 承接上文2. 插入操作2.1 函数原型(总括)2.2 尾插尾删2.2.1 操作2.2.2 代码展示2.2.3 测试结果2.3 迭代器插入2.3.1 操作2.3.2 代码展示2.3.3 测试结果2.4 think小思考2.4.1 小疑问2.4.2 思路2.4.3 代码展示2.4.4 测试结果3. 删除…...
打工人必知必会(二)——劳动合同解除
目录 1、劳动合同的解除种类 2、协商解除劳动合同 3、用人单位解除劳动合同 1)过错性解除劳动合同 2)非过错性解除劳动合同 4、经济性裁员解除劳动合同 5、违法解除劳动合同 6、 劳动者解除劳动合同 提前30日以书面形式通知用人单位 员工即时解…...
量化选股——基于多因子模型的量化策略(第1部分—因子测算策略构建)
文章目录1.多因子模型概述2.因子挖掘3.多因子策略4.多因子策略构建基于多因子的策略通用流程Fama-French三因子因子效果测算方法因子测算结论&量化策略构建东西有点多,拆开成多个文章,边写边整合~,应该会分成2部分: 第1部分—…...
(Java高级教程)第四章必备前端基础知识-第三节1:JavaScript简介和基础语法
文章目录一:JavaScript简介(1)JavaScript概述(2)JavaScript特点(3)JavaScript运行过程(4)JavaScript组成(5)JavaScript的引入方式和基本使用&…...
好的质量+数量 = 健康的创作者生态
缘起 CSDN 每天都有近万名创作者发表各种内容, 其中博客就有一万篇左右。 这个数量是非常可喜的,这也是 CSDN 的产品、研发运营小伙伴、和各位博主持续工作的结果。 衡量一个 IT 内容平台,除了数量之外,还有另外一些因素…...
利用Golang可选参数实现可选模式
本文讨论Golang函数可选参数及函数类型,以及如何利用可选函数类型实现可选模式。同时通过构造函数作为示例,实现强大带可选参数的构造函数,让代码更直观、灵活、支持扩展。 从需求开始 可选参数给函数传递额外参数扩展或修改其行为…...
【Git】Git 的基本使用
Git的简介 Git是一个版本管理控制系统(缩写VCS),是一个工具,github或者gitee是git命令行工具的网站化。它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。 git的诞生历…...
MyBatis(一)MyBatis概述
一、什么是框架 ● 在文献中看到的framework被翻译为框架 ● java常用的框架: SSM三大框架:SpingSpringMVCMyBatisSpringBootSpringCloud● 框架其实就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引…...
吴恩达机器学习笔记(三)逻辑回归
机器学习(三) 学习机器学习过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。 —— 吴恩达机器学习第五章 —— 四、逻辑回归 线性回归局限性 线性回归对于分类问题的局限性:由于离群点…...
[python入门㉞] - python错误和异常处理
目录 ❤ 语法错误 ❤ 异常 ❤ 异常的分类 ❤ 错误异常处理 错误就是Python中的语法错误或者异常(解析错误)。 ❤ 语法错误 语法错误也叫做解析错误,是指python无法正确的识别代码的造成的。根本原因在于人的行为。 解决方法:按照正确的语法进…...
用1行Python代码识别增值税发票,YYDS
大家好,这里是程序员晚枫。 录入发票是一件繁琐的工作,如果可以自动识别并且录入系统,那可真是太好了。 今天我们就来学习一下,如何自动识别增值税发票并且录入系统~ 识别发票 识别发票的代码最简单,只需要1行代码…...
Sharding-JDBC(五)PageHelper分页报错 Can‘t find index: AggregationSelectItem
目录1.详细报错信息:2.问题原因:3.解决方法:3.1)使用MyBatisPlus自带的分页功能3.2)PageHelper ShardingJDBC53.3)PageHelper ShardingJDBC41.详细报错信息: Caused by: org.apache.ibatis.e…...
十六进制转八进制+超大数据处理(蓝桥杯基础练习C/C++)
目录 1 题目要求 2 代码 2.1 以十进制为媒介(不可行) 2.2 以二进制为媒介 3 可能会遇到的难点 4 结论 5 延伸 5.1 超大数据阶乘 5.2 超大数据加法 5.3 以十进制为媒介的进制转换 1 题目要求 2 代码 2.1 以十进制为媒介ÿ…...
蓝桥杯2020省赛python
蓝桥杯2020省赛Python 第一题:门牌制作 用了一个时间复杂度是n的算法,反正是填空题也不会出现TLE的事,只要别太离谱就行了。 利用python 的count函数 res 0 for i in range(1,2021):i str(i)res i.count(2) print(res)答案是2 第二题&…...
kaggle竞赛 | 计算机视觉 | Doodle Recognition Challenge
目录赛题链接赛题背景数据集探索合并多个类别CSV数据集数据建模 (pytorch)赛题链接 https://www.kaggle.com/competitions/quickdraw-doodle-recognition/overview/evaluation 数据集从上述链接中找 赛题背景 Quick,Draw!作为实验性游戏发布ÿ…...
如何设计一个70W在线人数的弹幕系统文章分析
原文地址: 如何设计一个70W在线人数的弹幕系统 1:http包头 一个http数据包请求由4个部分组成:请求行、请求头标、空行、请求数据。 请求行分为了三个部分。请求方法,请求url与http版本。请求头行,由关键字值对组成&…...
基于Android的动漫之家系统的设计与实现
目录 1.课题研究立项依据 2.文献综述 3.课题研究的基本内容及预期目标或成果 4.课题的研究方案 5.研究进度安排 6.主要参考文献 1.课题研究立项依据 目前国家的动漫交流也正处在不断改革、创新的阶段,我国有关部门充分吸取国外优秀的动漫交流模式,…...
流批一体计算引擎-7-[Flink]的DataStream连接器
参考官方手册DataStream Connectors 1 DataStream连接器概述 一、预定义的Source和Sink 一些比较基本的Source和Sink已经内置在Flink里。 1、预定义data sources支持从文件、目录、socket,以及collections和iterators中读取数据。 2、预定义data sinks支持把数据写…...
测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法
目录一、测试用例的万能公式二、对登录页面设计测试用例三、测试用例的设计方法3.1 基于需求的设计方法3.2 等价类3.3 边界值3.4 判定表3.5 正交排列3.6 场景设计法3.7 错误猜测法四、面试真题一、测试用例的万能公式 首先,为"水杯"设计一个测试用例&…...
【进击的算法】基础算法——怎么优雅地控制边界范围
学习范围 : ✔️数组 ✔️边界控制本文作者 : 蓝色学者i 边界控制的艺术前言一、为什么需要控制边界?二、怎么优雅地控制边界?三、令人抓狂的二分查找3.1 题目概述3.2解题思路3.3 解决方案方案一:边界都有效方案二&…...
linux基本功系列之-rpm命令实战
文章目录前言🚀🚀🚀一. rpm命令介绍1.1 RPM包介绍1.2 rpm包的优缺点1.3 rpm包获取方式二. 语法格式及常用选项2.1 RPM安装常用参数2.2 rpm格式介绍三. 应用案例3.1 从本地安装软件包3.2 查询lrzsz的包有没有安装3.3 查询命令是哪个包安装的3.…...
冯诺依曼体系结构及操作系统(OS)的简单认识
文章目录冯诺依曼体系结构操作系统(Operator System)冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储结构。数学家冯诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑…...
day4 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ●160 链表相交 ● 142.环形链表II
两两交换链表中的节点 链表的指针,要仔细画图,搞清楚cur和cur的next在哪里 这个题还是有点绕的,两两一组交换,还有奇偶数要考虑 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* dummyhead new ListNo…...
【Linux】目录权限和默认权限
上期介绍了Linux的文件权限,这期我们仔细来说说Linux环境下目录权限和默认权限一、目录权限1.1 进入目录所需的权限我们在进入目录时需要什么样的权限呢?是r、w还是x呢?下面我们一起来验证一下:📋如下我门拥有全部目录…...
kaggle竞赛 | 计算机视觉 | 数字图像基础操作
目录cv2基本操作图片哈希图像数据扩展无监督数据扩展方法监督式数据扩展方法cv2基本操作 import numpy as np import matplotlib.pyplot as plt import cv2img cv2.imread(cat.jpeg) plt.imshow(img)img cv2.imread(cat.jpeg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) pl…...
7. 好客租房-项目日常推进ing
7. 好客租房-项目日常推进ing 本章节不涉及大量内容,主要是为了推荐项目代码日常进度而设置, 包括添加mock接口, 添加更新房源接口, 为系统添加缓存. 7.1 为前端系统提供mock服务 往往在项目开发中, 为实现前后端并行开发,后端需要对前端所有的请求都都进行支持。…...
前同事居然因为 Pycharm 的这个功能,即使离职三年也依然经常被请去喝茶~
大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 ὎…...
python使用类装饰器生成函数的使用日志
1 什么是类装饰器 在了解类装饰器之前,建议大家先了解装饰器的概念。 装饰器知识快速入门链接 类装饰器是 Python 中的一种特殊类型的装饰器,它是一个类而不是一个函数。与函数装饰器不同,类装饰器可以在运行时接收参数并返回一个可调用的对…...
有关Android的TextView组件的几个问题
文章目录小结问题及解决参考小结 TextView组件与EditText类似,但有一些不同,理论上TextView是只读的。尝试了让TextView组件可以弹出SetError的提示信息,只读,并不能弹出Android软键盘。 问题及解决 如果需要将TextView组件不能…...
Spring核心模块解析—BeanDifinition。
BeanDifinition前言什么是BeanDefinition?为什么要有BeanDefinition?BeanDifinition重点源码总结前言 Spring中的BeanDifinition在Bean的实例化流程中占有着非常重要的角色,如果你不了解BeanDifinition的话,面试或者学习Bean的生…...
【目标跟踪】------deepsort
目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略,即基于目标检测的结果来进行目标跟踪。DeepSORT运用的就是这个策略,上面的视频是DeepSORT对人群进行跟踪的结果,每个bbox左上角的数字是用来标识某个人的唯一ID号。 Deepsort的前身是sort算法,sort算法的核心是卡尔…...
教你一键生成形如Springboot的高大上banner打印效果
背景 今天闲来无聊,想搞一个类似于Springboot项目启动时打印效果,如下图: 问题解决方案 那这个打印效果怎么实现的呢? 其实,对于这个中效果实现起来也是很简单的。毕竟依托于Springboot强大的框架,任何问…...
RESTful的意义及其使用规则
本文参考: https://javaguide.cn/system-design/basis/RESTfulAPI.html 何为 RESTful API? GET /classes:列出所有班级 POST /classes:新建一个班级RESTful API 可以让你看到 URLHttp Method 就知道这个 URL 是干什么的&…...
Linux产生死锁的必要条件和常见的锁种类
目录前言产生死锁的4个必要条件预防(解决)死锁Linux常见的锁互斥锁(普通锁)自旋锁互斥锁和自旋锁小结递归锁读写锁乐观锁与悲观锁乐观锁和悲观锁小结其他锁(了解)前言 之前面试的时候,有面试官问我产生死锁的(4个)必要条件,这个我之前有了解过ÿ…...
【HBase入门】8. HBase Java编程(2)——创建表、插入数据、删除数据
前言 本文是HBase Java编程(2)——创建表、插入数据、删除数据。 需求一:使用Java代码创建表 创建一个名为WATER_BILL的表,包含一个列蔟C1。 实现步骤: 1.判断表是否存在——存在,则退出 2.使用TableDe…...
【初识数据库】进入数据库的大门+数据库基本操作
前言: 大家好,我是良辰丫🍓🍓🍓,这个专栏我将带领大家去探索数据库的汪洋大海,我主要使用的数据库软件是MySQL,数据库软件大同小异,嘿嘿嘿,废话不多说&#x…...
Python Flask 框架设置响应头,一篇文章学明白
flask 响应头设置📖 导读📖 Python Flask 设置响应头🎉 response.headers 属性🎉 flask.abort() 函数返回特定状态码📖 Flask 中可设置的响应头参数📖 其他关于响应头的配置🎁 使用中间件&#…...
阿里“云开发“小程序(uniCould)
博主ps: 网上资料少的可怜,哎,腾讯云涨价了,论服务器,我肯定选的阿里,再着你们对比下unicould的报价就知道了,如果有钱就另当别论了。 所以这片博文,博主试过之后,先抛出…...
Python装饰器使用方法详解
文章目录1 装饰器背景知识1.1 基本概念1.2 应用场景2 简单的装饰器代码3 使用装饰器记录函数执行次数4 带参数的装饰器5 装饰器处理有返回值的函数1 装饰器背景知识 1.1 基本概念 装饰器(Decorator)是 Python 中一种函数或类,用来修饰其他函…...
【Leetcode每日一题】69. x 的平方根/Sqrt(x)|二分查找---day3
博主简介:努力学习的预备程序媛一枚~博主主页: 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 目录题目描述题目分析:代码分析:题目描述 链接: 69. x 的平方根/Sqrt(x) 给你一个非负整数 x ,计算并返回 x 的 算术…...
2023.1完整版:适合的网盘,各大网盘对比测试,速度,安全性,可预计的未来
在网上看到过网盘对比,但发现还是不全,有时还是需要自行测试,所以这里我就给大家列出所有的网盘,也包括一些类似于网盘的平台: 注意:这里统计的平台都是至少要满足可以上传文件的网盘,并且包含个…...
【编程入门】开源记事本(安卓版)
背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记,将更为简化,去掉了网络调用࿰…...
Python流程控制语句之循环语句
上一篇:Python流程控制语句之选择语句 文章目录前言一、while 循环二、for 循环1. 进行数值循环2. 遍历字符串三、循环嵌套总结前言 生活中很多问题都无法一次解决,就像谚语所说:罗马不是一天建成的。一些事物必须周而复始地运转才能保证其存…...
17种编程语言+10种排序算法
开源地址 https://gitee.com/lblbc/simple-works/tree/master/sort 覆盖语言:C、C、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift、PHP。 覆盖平台:安卓(Java、Kotlin)、iOS(SwiftUI)、Flutter(Dart)、Window桌面(C#)、前…...
【JavaSE专栏8】运算符、表达式和语句
作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…...
【c语言进阶】常见的静态通讯录
🚀write in front🚀 📜所属专栏:c语言学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我…...
27. 作用域
1. 定义 作用域就是一个 python 程序可以直接访问命名空间的正文区域。 在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。 python 中,程序的变量并不是在哪个位置都可以访…...
笔试题-2023-华为-数字芯片【纯净题目版】
回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.07.29应聘岗位:数字IC设计题目评价 难易程度:★★★★☆知识覆盖:★★★★☆超纲范围:★☆☆☆☆值得一刷:★★★★☆文章目录 单…...
缓存失效问题和分布式锁引进
缓存失效问题 先来解决大并发读情况下的缓存失效问题; 1、缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数 据库也无此记录,我们没有将这次查询的 null 写入缓存&#x…...
千峰学习【Ajax】总结
1.同步和异步 2.Ajax状态码 3.创建对象,发送请求 <script>//1.创建XHR: new XMLHttpRequest():var xhr new XMLHttpRequest();// console.log(xhr);//2,配置open(请求方式,请求地址,是否异步(默认为异步)) loc…...
管姚:普京访华,两个关键细节意义重大
直新闻:俄总统普京5月16日应邀开启对华国事访问,中俄元首举行小范围及大范围两轮会谈并共同见记者,联合发布有关深化新时代中俄全面战略协作伙伴关系的联合声明,管先生,您对此访有何特别观察?特约评论员 管姚:我注意到,今天在和普京总统进行小范围会谈时,中国元首特别…...
5种被夸大的皮肤科神药很多人还在乱用!快自查!
你有听说过皮肤科的“神药”吗?很多人皮肤出了问题,往往会选择忽视,自己网上一搜,发现网上会推荐一些“神药”,不仅宣称安全无害、价格低廉,更重要的是用途多样,药到病除,谁看了都心动,甚至觉得不买就是吃亏。但其实,皮肤科没有“神药”!下面就是一些经常被夸大宣传…...
用ntpdate同步时间出现问题
1. 使用ntpdate同步 [rootnode ~]# ntpdate ntp.aliyun.com4 Aug 00:07:17 ntpdate[20924]: adjust time server 203.107.6.88 offset -0.001543 sec2. 查看时间 [rootnode ~]# date Thu Aug 4 00:07:46 CST 20223. 如果时间对不上 报错信息 cna02:~ # ntpdate ntp1.aliyu…...
SAP_ABAP-思考篇
作为一个SAP十年左右的从业者,其实我很清楚,我自身的能力,确实是很多东西都会一点,但是没有一样是精通的。坦白来说,我的个人简介里,虽然也不算夸大,但我估计有些新手小白看着可能会觉得还挺厉害…...
数据库ID生成策略及相应的代码示例(优缺点)
以下是各大厂常用的数据库ID生成策略及相应的代码示例: 1. 自增ID(Auto Increment) 适用于单机数据库,如MySQL、PostgreSQL。 应用场景:主要用于单机数据库,如MySQL、PostgreSQL。优点:简单易…...
分布式系统的一致性与共识算法(三)
顺序一致性(Sequential Consistency) ZooKeeper 一种说法是ZooKeeper是最终一致性,因为由于多副本、以及保证大多数成功的ZAB协议,当一个客户端进程写入一个新值,另外一个客户端进程不能保证马上就能读到这个值,但是能保证最终能…...
.NET使用Microsoft.IdentityModel.Tokens对SAML2.0登录断言校验
如题。使用SAML单点登录对IDP返回的Response断言使用微软提供的Microsoft.IdentityModel.Tokens对断言(Assertion)进行校验。 首先需要安装Muget包,Microsoft.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens.Saml。 简易示例代码如…...
JL-杰理芯片-认识TA的SDK的第四天
无蓝牙连接关机时间 关机时间:3分钟 60 * 5 300 低功耗 进入低功耗前,要关闭打印 内存D2、D4、D8 芯片(主控)的内存不能超过一定的数值,超过后就不能烧录 jl_isd.bin这个文件不能超过内存大小 而杰理的内存是…...
VMware Fusion 13.5.2 for Mac 发布,产品订阅模式首个重大变更
VMware Fusion 13.5.2 for Mac 发布,产品订阅模式首个重大变更 适用于基于 Intel 处理器和搭载 Apple 芯片的 Mac 的桌面虚拟化软件 请访问原文链接:https://sysin.org/blog/vmware-fusion-13/,查看最新版。原创作品,转载请保留…...
【C++】学习笔记——多态_1
文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承,那组合又是什么?下面这种情况就是…...
基于SpringBoot设计模式之创建型设计模式·工厂方法模式
文章目录 介绍开始架构图样例一定义工厂定义具体工厂(上衣、下装)定义产品定义具体生产产品(上衣、下装) 测试样例 总结优点缺点与抽象工厂不同点 介绍 在 Factory Method模式中,父类决定实例的生成方式,但…...
动态路由实验新手入门:快速掌握核心知识点
大家好,这里是G-LAB IT实验室。今天带大家学习一下华为动态路由实验配置,新手入门,快速掌握核心知识点! 01、实验拓扑 02、实验需求 1.根据拓扑运行对应的路由协议 2.每个路由器都有自己的环回口,宣告的区域不限制 …...