C++初阶:vector类
文章目录
- 1 vector介绍
- 2 实现vector
- 2.1 类的定义
- 2.2 默认成员函数
- 2.2.1 构造函数
- 2.2.2 析构函数
- 2.2.3 拷贝构造
- 2.2.4 赋值重载
- 2.3访问接口
- 2.4 容量接口
- 2.5 修改接口
- 2.5.1 尾插尾删
- 2.5.2 任意位置插入
- 2.5.3 任意位置删除
- 2.6 其他接口
1 vector介绍
1 vector是表示可变大小数组的序列容器。
2 就像数组一样,vector也采用连续存储空间的方式来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
3 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组为了增加存储空间需要被重新分配大小。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2 实现vector
可以看出,vector使用start指向数组的起始位置,finsh指向数组有效元素的下一个位置,end_of_storage指向区间的容量
2.1 类的定义
namespace zbt
{template <class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;private:iterator _start;//指向数组的起始位置iterator _finsh;//指向数组有效元素的下一个位置iterator _end_of_storage;//指向区间的容量};
和之前实现string不同的是,把指向元素个数和区间容量的值改为用相应的迭代器实现,但本质是一样的。我们可以看到,vector的迭代器底层实现依旧是指针。
之所以定义为类模板,是因为vector里面不仅可以存int,char,double这样的内置类型,同样也可以存储string,甚至vector这样的自定义类型
2.2 默认成员函数
2.2.1 构造函数
vector():_start(nullptr),_finsh(nullptr),_end_of_storage(nullptr){}
无参的构造函数,直接把三个指针初始化为nullptr。
除了使用无参的构造函数,我们看到C++的官方文库还支持使用迭代器区间进行构造的方式
//函数模板template <class InputIterator>vector(InputIterator first, InputIterator last)//给定一段迭代器区间:_start(nullptr),_finsh(nullptr),_end_of_storage(nullptr){while (first != last){push_back(*first);//从头开始将元素一个接一个尾插到vector里面first++;}}
从中可以看出,在类模板里面同样也可以套用函数模板,将此函数实现为模板函数,这样任意类型的迭代器都可以用来构造vector
当然,实现迭代器区间构造的方式前提还需要实现push_back函数
example:
std::string s("hello");//使用迭代器区间构造vvector<char>v(s.begin(), s.end());for (auto e : v){cout << e << " ";}cout << endl;
用string的迭代器去构造vector
2.2.2 析构函数
~vector(){delete[]_start;//将动态开辟的空间释放掉_start = _finsh = _end_of_storage = nullptr;}
2.2.3 拷贝构造
//现代写法void swap(vector<T>& tmp){::swap(_start, tmp._start);::swap(_finsh, tmp._finsh);::swap(_end_of_storage, tmp._end_of_storage);}//v2(v3)vector(const vector<T>& v):_start(nullptr), _finsh(nullptr), _end_of_storage(nullptr){vector<T>tmp(v.begin(), v.end())//利用迭代器区间构造一个tmp,里面存储的值就是对应v的值;swap(tmp);//将v2和tmp进行交换}
2.2.4 赋值重载
//v2=v3;vector<T>& operator=(vector<T> v){//v就是v3的拷贝,然后将v和v2进行交换swap(v);return *this;}
2.3访问接口
访问方式可以是operator[ ]或者迭代器
iterator begin(){return _start;}iterator end(){return _finsh;}const_iterator begin()const{return _start;}const_iterator end()const{return _finsh;}T& operator[](size_t pos){assert(pos < size());return _start[pos];}const T& operator[](size_t pos)const{assert(pos < size());return _start[pos];}
2.4 容量接口
resize
void resize(size_t n,const T& val = T())//匿名对象调用默认构造,{if (n > capacity())//需要的空间比原有的空间大,先扩容{reserve(n);}if (n > size())//需要的空间大于有效数据的个数,在原有有效数据的后面插入val{while (_finsh != _start + n){*(_finsh) = val;_finsh++;}}else//需要的空间比原有的空间小,需要删除数据{_finsh = _start + n;}}
缺省值采用T()的形式,T()调用的是T类型的默认构造函数,初始化出一个匿名对象,得到的是T类型的空值
reserve
void reserve(size_t n){if (n > capacity()){size_t sz = size();T* tmp = new T [n];//动态开辟一块新的空间,大小为nif (_start)//如果原来的vector有数据,将数据拷贝到新的空间去{//memcpy(tmp, _start,sizeof(T)* sz);for (size_t i = 0; i < sz; i++){tmp[i] = _start[i];}delete[]_start;}//更新成员变量的值_start = tmp;_finsh = _start + sz;_end_of_storage = _start + n;}}
需要注意的是,在拷贝数据的时候,我们并没有使用memcpy直接将数据拷贝过去,而是采用一个一个的赋值,这是为什么呢?这里便涉及更深层次的深拷贝问题
如果vector里面存储的是int,double等内置类型,用memcpy进行浅拷贝是完全没有问题的。但是vector里面也可以存储自定义类型的数据,例如string,vector等,这时如果粗暴的将数据进行浅拷贝,那么原来数组中的数据和和此时新拷贝的数据便会指向同一块空间,析构函数对同一块空间释放两次,程序便会崩溃
所以在拷贝数据的时候,应使用深拷贝。这里我们采用的是赋值重载,即一个一个赋值。
2.5 修改接口
2.5.1 尾插尾删
void push_back(const T& x)//尾插{if (_finsh == _end_of_storage){reserve(capacity() == 0 ? 4 : capacity() * 2);//满了就扩容}*(_finsh) = x;_finsh++;}void pop_back()//尾删{assert(_finsh > _start);_finsh--;}
2.5.2 任意位置插入
iterator insert(iterator pos, const T& x){assert(pos >= _start);assert(pos <= _finsh);if (_finsh == _end_of_storage)//满了扩容{size_t len = pos - _start;reserve(capacity() == 0 ? 4 : capacity() * 2);//扩容完之后,_start的地址会发生变化,所以要更新pos地址pos = _start + len;}iterator end = _finsh - 1;while (end >= pos)//[pos~_finsh)位置的元素后移一位{*(end+1) =*end ;end--;}*pos = x;_finsh++;return pos;}
注意:
① 因为扩容会重新开辟一块空间,_start会指向一块新的空间,但pos还是指向之前的位置,没有更新,这时迭代器就会失效,所以在扩容之后要更新pos的值,指向新的位置。
② insert函数内的iterator失效问题解决了,但是函数外的pos并没有改变,仍然指向之前的位置,所以最后要将更新后的pos值作为返回值返回。
2.5.3 任意位置删除
iterator erase(iterator pos){assert(pos >= _start);assert(pos < _finsh);iterator begin = pos + 1;while (begin < _finsh)//pos位置之后的元素统一向前移动{*(begin - 1) = *begin;begin++;}_finsh--;return pos;}
任意位置删除是否有迭代器失效的问题呢?
答案是有的,举个栗子
删除数组元素中的偶数
第一种写法
vector<int>v3;v3.push_back(1);v3.push_back(2);v3.push_back(4);v3.push_back(3);v3.push_back(4);v3.push_back(5);vector<int> ::iterator it = v3.begin();while (it != v3.end()){if (*it % 2 == 0){v3.erase(it);}it++;}for (auto e : v3){cout << e << " ";}cout << endl;
很显然,答案错误,偶数并没有删除完,这种写法是有bug的
在删除元素2之后,由于2后面的元素前移,所以此时pos指向的是4,pos++刚好越过了4,所以没有删除掉4这个元素。此时迭代器便失效
第二种写法
vector<int>v3;v3.push_back(1);v3.push_back(2);v3.push_back(4);v3.push_back(3);v3.push_back(4);v3.push_back(5);vector<int> ::iterator it = v3.begin();while (it != v3.end()){if (*it% 2 == 0){it = v3.erase(it);}else{it++;}}for (auto e : v3){cout << e << " ";}cout << endl;
答案正确,在删除完元素后返回当前的pos,保证pos的位置正确(有些STL版本可能会缩容,导致pos为野指针),并且删除之后不能++pos的值。
综上所述,insert/erase pos位置的值后不要直接访问pos,因为此时迭代器已经失效。
2.6 其他接口
size_t capacity()const//返回容量大小{return _end_of_storage - _start;}
size_t size()const//返回有效元素的个数{return _finsh - _start;}
相关文章:
留存率预估
渠道也需要做留存率的预估,这时候我们除了简单的留存率根据幂函数拟合的方式预估之外,还可以考虑的就是用stl分解后用arima预估 首先考虑了下这个产品是否有周期性,周期性一般是季节性比如说12个月,或者说7天这样的。 游戏产品星期1~星期天的留存率汇总看了下确实是存在7日…...
Tkinter组件:Checkbutton
Tkinter组件:Checkbutton Checkbutton(多选按钮)组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被…...
机器学习 | 时间序列预测中的AR模型及应用
自回归模型,通常缩写为AR模型,是时间序列分析和预测中的一个基本概念。它们在金融、经济、气候科学等各个领域都有广泛的应用。在本文中,我们将探索自回归模型,它们如何工作,它们的类型和实际例子。 自回归模型 自回…...
Java容器化改造
docker java项目容器化改造 前后端分离项目 前端 https://gitee.com/yuco/eladmin-web.git 后端 https://gitee.com/yuco/eladmin.git要素:vue npm springboot mysql redisjava后端容器化 思路: 了解在物理机虚拟机的部署流程,然后编写dockerfile进行容器化部署。 java项目,…...
luatable.sort
local function compare_with_flag(a, b) -- 如果a和b都有标志,则按照它们的某个字段进行排序 if a.flag and b.flag then return a.sort_field < b.sort_field -- 假设有一个sort_field字段用于排序 -- 如果a有标志而b没有,则a应该排在b前面 …...
正则验证车牌号(包含新能源)
搜索引擎得新能源车牌号编码特殊规则: 1、小型新能源汽车号牌第一位必须使用字母“D”(纯电动汽车)或“F”(非纯电动汽车); 2、大型新能源汽车号牌第六位必须使用字母“D”或“F”。 正则表达式及校验函数如下: function isValidCarNumber(vno: string) {var pattern7 =/^…...
C++初阶:vector类
文章目录1 vector介绍2 实现vector2.1 类的定义2.2 默认成员函数2.2.1 构造函数2.2.2 析构函数2.2.3 拷贝构造2.2.4 赋值重载2.3访问接口2.4 容量接口2.5 修改接口2.5.1 尾插尾删2.5.2 任意位置插入2.5.3 任意位置删除2.6 其他接口1 vector介绍 1 vector是表示可变大小数组的序…...
机器学习中软投票和硬投票的不同含义和理解
设置一个场景,比如对于今天音乐会韩红会出现的概率三个人三个观点 A:韩红出现的概率为47% B:韩红出现的概率为57% C:韩红出现的概率为97% 软投票:软投票会认为韩红出现的概率为1/3*(47%57%97%)67% 硬投票:…...
Linux系统之网络客户端工具
Linux系统之网络客户端工具一、Links工具1.Links工具介绍2.安装Links软件3.Links工具的使用4.打印网页源码输出5.打印url版本到标准格式输出二、wget工具1.wget工具介绍2.安装wget软件3.wget工具的使用三、curl工具1.curl工具的介绍2.curl的常用参数3.curl的基本使用四、scp工具…...
c++函数(2)
这里写自定义目录标题默认参数函数重载递归函数变量周期默认参数 可为形参指定默认值,如果在函数调用时,没有指定与形参对应的实参时,就自动使用默认值。 默认参数可简化复杂函数的调用。 默认参数在函数名第一次出现在程序中指定࿰…...
HackTheBox Stocker API滥用,CVE-2020-24815获取用户shell,目录遍历提权
靶机地址: https://app.hackthebox.com/machines/Stocker枚举 使用nmap枚举靶机 nmap -sC -sV 10.10.11.196机子开放了22,80端口,我们本地解析一下这个域名 echo "10.10.11.196 stocker.htb" >> /etc/hosts 去浏览器访问…...
Java线程池应用实例
线程池的学习基本概念好处应用场景ThreadPoolExecutor实例理解:执行流程自定义线程池4大核心参数测试demo结论:ExecutorService常用方法思考获取ExecutorService代码示例ScheduleExecutorService常用获取方式如下ScheduledExecutorService常用方法如下:代…...
数字签名技术
介绍数字签名 数字签名是一种用于确认数据的完整性、确认发送者身份的技术。 签名主要包含两个过程:做摘要、进行非对称加密。 做摘要:签名者使用消息摘要算法对消息做摘要;进行非对称加密,得到签名值:签名者使用私…...
WPF-3D图形
WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制,只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念, 以及常用到的命中测试、2d控件如何在3D对象中进行渲染,除此之外,还演示了如何导入外部…...
返回值的理解
前言 我们写的函数是怎么返回的,该如何返回一个临时变量,临时变量不是出栈就销毁了吗,为什么可以传递给调用方?返回对象的大小对使用的方式有影响吗?本文将带你探究这些问题,阅读本文需要对函数栈帧有一定…...
前端布局神器display:flex
Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供最大的灵活性。首先举一个栗子,之前我们是这样实现一个div盒子水平垂直居中的。在知道对象高宽的情况下,对居中元素绝对百分比定位,然后…...
【Typescript学习】使用 React 和 TypeScript 构建web应用(三)所有组件
教程来自freecodeCamp:【英字】使用 React 和 TypeScript 构建应用程序 跟做,仅记录用 其他资料:https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第三天 以下是视频(0:40-0:60) 的内容 目录第三天1 创建Todo…...
7.3 矩阵范数
定义 向量有范数,矩阵也有范数,定义和向量范数类似,不过多了一条要求。它的定义如下: 正定性positivity,∥A∥≥0\parallel A\parallel\ge 0∥A∥≥0,只有A0A0A0时才取等号;非负齐次性homogeneity或scalin…...
Jetpack架构组件库:Hilt
Hilt Hilt 是基于 Dagger2 的依赖注入框架,Google团队将其专门为Android开发打造了一种纯注解的使用方式,相比 Dagger2 而言使用起来更加简单。 依赖注入框架的主要作用就是控制反转(IOC, Inversion of Control), 那么什么是控制…...
InstanceNorm LayerNorm
InstanceNorm && LayerNorm author: SUFEHeisenberg date: 2023/01/26 先说结论: 将Transformer类比于RNN:一个token就是一层layer,对一整句不如token有意义原生Bert代码或huggingface中用的都是InstanceNorm instead of LayerNormÿ…...
数据结构---堆
堆 定义 基本操作 建堆 堆排序 优先队列 一、堆的定义: 堆必须是一个完全二叉树 还得满足堆序性 什么是完全二叉树呢? 完全二叉树只允许最后一行不为满 且最后一行必须从左到右排序 最后一行元素之间不可有间隔,中间不可有空缺 如下几棵树…...
3小时精通opencv(五) 利用TrackBar进行颜色检测
3小时精通opencv(五) 利用TrackBar进行颜色检测 参考视频资源:3h精通Opencv-Python 本章内容介绍如何利用TrackBar调节色域, 手动提取到我们需要的颜色 文章目录3小时精通opencv(五) 利用TrackBar进行颜色检测创建Trackbar色彩检测创建Trackbar 在opencv中使用createTrackbar函…...
学习记录673@项目管理之进度管理案例
本文主要是进度管理之关键链路法的案例。 案例 Perfect 项目的建设方要求必须按合同规定的期限交付系统,承建方项目经理李某决定严格执行项目进度管理,以保证项目按期完成。他决定使用关键路径法来编制项目进度网络图。在对工作分解结构进行认真分析后&…...
【设计模式】结构型模式·组合模式
学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易,如果您觉得写的不错,欢迎给博主来一波点赞、收藏~让博主更有动力吧! 一.概述 又称为部分整体模式,用于把一组相似的对象当作一个单一的对象。组合模式依…...
Vue-Router详解
1、前端路由的发展历程 1.1、认识前端路由 路由其实是网络工程中的一个术语: 在架构一个网络时,非常重要的两个设备就是路由器和交换机。当然,目前在我们生活中路由器也是越来越被大家所熟知,因为我们生活中都会用到路由器&…...
Eclipse中的Build Path
Eclipse中的Build Path简介如果修改了Build Path中的中的JRE版本,记得还需要同步修改Java编译器的版本,如下图红框所示简介 Build Path是Java工程包含的资源属性合集,用来管理和配置此Java工程中【除当前工程自身代码以外的其他资源】的引用…...
Python与Matlab混合编程案例
前言因为项目需要,需要批处理很多Matlab的.m文件,从每个文件中提取结果合并到一个文件中。 很明显,如果手工统计,几百个文件会累死的。 因此立即想到了Python在批处理方面的优势,因此就在网上找了相关资料,…...
stack、queue、priority_queue
容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 其中stack和queue都是容器适配器,其中stack可以封装vector、list以及我们…...
高通平台开发系列讲解(GPS篇)gpsONE 系统架构
文章目录 一、系统架构图二、gpsONE系统组成三、gpsONE交互流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢高通的定位系统模块,名称叫gpsONE。 一、系统架构图 二、gpsONE系统组成 GPS系统架构可以分为六个部分: APP层Framework Client端(LocationManager API…...
zkMove——针对Move合约生态的zkVM
1. 引言 Move为不同于Solidity的,开源的安全的智能合约开发语言,最早由Facebook为Diem链创造开发。不过,Move本身设计为与平台无关的语言,具有通用的库、工具,并使得采用完全不同数据模型和执行模型的链的开发者社区都…...
贪心算法的题目
每一步都做出一个局部最优的选择,最终的结果就是全局最优 只有一部分问题才能用贪心算法(严格来讲,一个问题能不能用贪心算法需要证明的) 2022.8.30 蔚来笔试题: 有a个y,b个o,c个u,用这些字母拼成一个字符串…...
线程控制--Linux
文章目录线程理解线程的优点与缺点进程的多个线程共享线程控制线程创建线程终止线程等待线程分离总结线程理解 谈及线程,就不得不谈起进程与线程的关系了。学习完前面有关进程的知识,之前我们对进程的定义是:内核数据结构代码和数据。但是今…...
17 | 如何做好面试复盘?将经验提升为能力
前言 前言:面试是最好的查漏补缺机会,做好面试复盘又是十分的重要。 文章目录前言一. 关于复盘1. 什么是复盘(What)2. 复盘的目的(Why)3. 什么时候需要复盘(When)4. 怎么进行复盘&am…...
数据结构-树
1. 二叉树遍历 #include <stdbool.h> #include "stdio.h" #include "stdlib.h"typedef struct TNode *Position; typedef Position BinTree; // 二叉树类型 typedef char ElementType;// 树结点定义 struct TNode {ElementType Data; // 结点数据Bin…...
Python3 循环语句
本章节将为大家介绍 Python 循环语句的使用。 Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示: while 循环 Python 中 while 语句的一般形式: while 判断条件(condition):执行语句(statements)…… 执行流程…...
时序数据处理中的拟合问题
对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(…...
[数据结构基础]排序算法第一弹 -- 直接插入排序和希尔排序
目录 一. 排序的概念及分类 1.1 排序的概念 1.2 常见的排序算法 二. 直接插入排序 2.1 直接插入排序的实现逻辑 2.2 直接插入排序的实现代码 2.3 直接插入排序的时间复杂度分析 三. 希尔排序 3.1 希尔排序的实现逻辑 3.2 希尔排序实现代码 3.3 希尔排序的效率测试 …...
厚积薄发打卡Day115:Debug设计模式<简单工厂、工厂方法、抽象工厂>
厚积薄发打卡Day115:Debug设计模式<简单工厂、工厂方法、抽象工厂> 简单工厂 定义 由一个工厂对象决定创建出哪一种产品类的实例(严格意义并不是设计模式,更是一种风格) 类型:创建型,但不属于GOF…...
python元组
python元组 文章目录python元组一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建元组2.访问元组3.修改元组4.删除元组5.索引及截取6.元组运算符7.内置函数总结一、实验目的 掌握元组的用法 二、实验原理 Python 的元组与列表类似,不同之处在…...
gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__
今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以此记录。GNU C预定义了一系列的宏,这些宏都是以双下划线开始的,这里只讲一下__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__,完…...
AxMath使用教程(持续更新中)
前言 这两天学了学Latex,主要是为了以后写毕业论文做铺垫,而且Latex在数学公式这一方面,要比Word方便许多,于是我就下载了一款国产的公式编辑器——AxMath。永久会员不贵,只要36元,而且软件很好用…...
day11 栈和队列 | 20、有效的括号 1047、删除字符串中的所有相邻重复项 150、逆波兰表达式求值
题目 20、有效的括号 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序…...
【前端面试】http面试整理
"一问一答"模型的协议 客户端通过http请求;服务器端根据请求返回客户想要的资源;客户端接收到资源;http是什么 HTTP是超文本传输协议,是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约…...
倒霉倒霉倒霉(传送门 bfs 三维数组 递归 综合运用
题目描述“啊!倒霉倒霉倒霉~”龙叔被困在一座大厦里了,可恶的瓦龙把这座大厦点燃了,他借机消灭龙叔。这座大厦有L层,每一层都有R*C个房间。熊熊火焰蔓延十分快,有的房间已经着火了,龙叔没办法通过。这时老爹…...
C++函数定义和调用介绍
C函数定义和调用介绍 函数的意义:利用率高,可读性强,利于移植。 一个C程序中主函数有且只有一个,是程序的入口,而函数(或称子函数)可以有很多。 每个 C 程序都至少有一个函数,即主…...
手把手带初学者快速入门 JAVA Web SSM 框架
博主也是刚开始学习SSM,为了帮大家节省时间,写下SSM快速入门博客 有什么不对的地方还请 私信 或者 评论区 指出 只是一个简单的整合项目,让初学者了解一下SSM的大致结构 项目先把框架写好,之后在填写内容 项目压缩包 完整的蓝奏…...
RocketMQ源码本地搭建调试
1 GitHub源码 git clone https://github.com/apache/rocketmq.git导入IDEA,可在命令行执行mvn compile一下,保证源码能够正确编译。本次我使用的master分支的版本-4.8.0。下面我们开始准备启动Namesrv。 2 启动Namesrv 到namesrv模块找到NamesrvStart…...
Axios 二次封装并使用
index.js import axios from "axios";let token localStorage.getItem("token"); // let token "123213"; class Request {// 自定义变量instance;constructor(config) {// console.log(config)// 创建axios 实例,变量接收this.in…...
【SpringCloud】Nacos集群搭建
集群结构图官方给出的Nacos集群图如下:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们接下来要尝试 Nacos集群搭建,效果图如下所示:三个nacos节点的地址:节点ipportnacos1l…...
【CSDN的2022与2023】普普通通的三年,从懵懂、焦虑到坚定、奋进,破除焦虑努力成为更好的自己
大家好,我是黄小黄!一名普通的软件工程在读学生。最近终于闲下来了一丢丢!借着休息之余,来写一篇年度总结散散心~与其说是年度总结,不如说是给大学生活与莽莽撞撞的自己一个交代叭! 这些都是小标题~碎碎念1…...
k8s单机版使用本地存储local-path-provisioner
在k8s单机环境中,我们经常使用本机路径作为持久化存储。在k8s官方文档中有两种方式使用本机存储,一种是hostPath,另一种是local volume,这两种都不支持动态扩容,并且程序移植改动比较大,而local-path-provi…...
MySQL优化(1)执行计划explain中type属性详解
系列文章目录1.初始化测试数据1.初始化表格(user表)2.初始化表格(product表)3.初始化表格(user表数据初始化)4.初始化表格(product表函数)5.初始化表格(product表数据初始…...
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别servlet过滤器1.filter过滤器的含义2.filter过滤器的使用3.测试-过滤字符编码正确响应中文编码3.1 创建servlet用于显示中文字符3.2 自定义过滤器3.3 配置web.xml中的servlet映射以及过滤器请求拦截3.4 运行输出…...
Java链表OJ题
目录1. 删除链表中等于给定值val的所有结点2. 逆置单链表3. 链表的中间结点4. 链表中倒数第k个结点5. 将两个有序链表合并为一个新的有序链表6. 以给定值x为基准将链表分割成两部分7. 判断是否为回文链表8. 两个链表的第一个公共结点9. 判断链表中是否有环10. 链表开始入环的第…...
0、Spring工程构建Spring快速入门Spring配置文件详解注入Sprint相关API
1、Spring工程构建 创建工程项目目录文件夹 IDEA选择项目new一个module 配置案例 aop创建 创建并下载完毕后,点击file选择projert 选择按照的jdk版本 output选择当前目录, 点击右下方apply 选择facets,点击""号选择web 选择当前…...
网络原理之HTTP/HTTPS、TCP、IP四层协议栈
文章目录一、应用层(一)xml协议(二)json协议(三)protobuffer协议(四)HTTP协议1. 抓包工具,fiddler2. HTTP报文格式3. HTTP请求(Request)(1)URL基本…...
AJAX家政系统 自营+多商家(高级授权)+独立端口 -源码下载
应用介绍 后台:https://service.hnajax.com/hxeJVakAdf.php/index/login AJAX家政系统 自营多商家(高级授权)独立端口 基于FastAdmin和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统,用户端、服务端(高级授权)、门店端(高级授权)各端…...
若依分离版-前端使用echarts组件
1 npm list:显示已安装的模块 该命令用于列出当前项目的所有依赖关系,包括直接依赖和间接依赖。执行 npm list 时,npm 将从当前目录开始,递归地列出所有已安装的模块及其版本信息 npm list 2 npm outdated:用于检查当前项目中的npm包是否有…...
LocalDate 数据库不兼容问题,因为LocalDate 是 long 类型的
我今天遇到一报错: SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession316f9272] was not registered for synchronization because synchronization is not active JDBC Connection [HikariProxyConnection2127597288 wrapping com.mysql.cj.jdbc…...
最长连续序列(Lc128)——哈希表
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出:4 …...
智慧公厕建设,打造智慧城市基础设施新亮点
公共厕所是城市基础设施的重要组成部分,而智慧公厕的建设则是现代城市管理的创新之举。为了实现公厕的精细化管理和提供更便捷的服务,推进智慧公厕建设必须要实现技术融合、业务融合、数据融合的目标,跨越层级、地域、系统、部门和业务的限制…...
auto encoder笔记
参考: https://zhuanlan.zhihu.com/p/80377698 https://blog.csdn.net/u013250861/article/details/111290319 概览 自编码器可以理解为一个试图去还原其原始输入的系统。 也可以说是:一种利用反向传播算法使得输出值尽可能等于输入值的神经网络。 自…...
记录些大模型题集(2)
请简述Transformer基本原理Transformer模型是基于自注意力机制的深度学习模型,主要应用于自然语言处理领域。其基本原理可以概括为以下几个核心组成部分: 自注意力机制(Self-Attention Mechanism)自注意力机制是Transformer的核心概念,它允许模型在进行编码时能够考虑到输…...
通过 Java 操作 redis -- set 集合基本命令
目录 使用命令 sadd ,smembers 使用命令 sismember 使用命令 scard 使用命令 spop 使用命令 sinter,sinterstore,sunion,sunionstore,sdiff,sdiffstore 关于 redis set 集合类型的相关命令推荐看Redis …...
【MM32F3270火龙果】点亮led
文章目录 前言GPIO的工作模式一、有哪些工作模式?1.1 GPIO的详细介绍1.2 GPIO的内部框图输入模式输出部分 二、操作GPIO点亮led2.1 初始化gpio2.2 写gpio 三、示例代码总结 前言 本文将介绍如何在MM32F3270火龙果微控制器上使用Keil开发环境点亮LED。MM32F3270火龙…...
Ubuntu 下串口工具:Minicom、CuteCom 和 Screen
在 Ubuntu 中,对于串口通信工具的选择,虽然没有一个绝对的 “最好用” 的排名,但根据用户反馈和工具的流行程度,Minicom、CuteCom 和 Screen 这三个工具通常被认为是较为受欢迎和实用的。 一、简介: Minicomÿ…...
【测试报告】星光日册
⭐ 作者:Jwenen 🌱 作者主页:Jwenen的个人主页 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 测试报告 1. 项目介绍2. 测试用例框架3. 自动化测试源码 1. 项目介绍 “星光日册”项目实现了用…...
el-carousel走马灯页数回到第一页
我的走马灯是在一个弹窗里,包裹着一些button,切换到下一页时 关闭弹窗再打开弹窗还显示的是上次第二页位置 领导很不满意 1. 2.写在你打开弹窗或者关闭弹窗的位置 this.$refs.carousel && (this.$refs.carousel.activeIndex 0); 解释一下: this.$refs.carousel: thi…...