vector的实现:
我们之前讲了vector的接口,我们今天来看一下vector的底层的实现:
在gitee上面我们的这个已经实现好了,我们看gitee就可以:vector的实现/vector的实现/vector的实现.h · 拾亿天歌/拾亿天歌 - 码云 - 开源中国
我们在这强调比较难的知识:
迭代器失效:
首先是插入函数:insert:
我们看上面的是我们的插入函数的实现:
我们进入到函数以后先判断一下这个pos位置是不是合法的,然后看内存满了没有,如果满了的话,我们就进行一下扩容:
扩容完后我们设置一下我们的迭代器:(我们的迭代器可以看作是一种指针);
我们的_finish指的是我们的最后一个数据的下一个位置;
//也就是我们的_finish指向的不是一个有效的数据。
我们把迭代器it设置为我们的最后一个数据:
然后把pos及后面的所有的数据全部往后移动一位,最后把数据插入到pos位置。
我们的这个代码看起来都非常的好,但是这里会出现一个我们的迭代器失效的问题:
我们先看一下我们的reserve函数:
我们的上面的三张图片组成了我们的reserve函数:
我们看我们的函数,当我们要扩容的时候,我们给我们的函数传n进去,我们进行扩容,我们开辟新的内存空间,然后把原来的内存空间里面的数据拷贝过来,然后我们再把原来的内存空间释放掉;
看起来似乎没问题:
我们再看这两张图片,这个就是我们的刚才的insert函数,然后我们看,我们把pos位置及以后的数据全部往后移动一位以后,我们在pos的位置上插入数据,最后完成。
但是实际上,我们在扩容结束以后,我们在我们的reserve函数里面,我们把数据都拷贝了过来,然后把原来的数据释放掉,并且更新了我们的三个指针的指向,但是有一个问题,我们的指向pos位置的迭代器指针,我们是从我们的insert函数我们就传了过去,我们的pos的迭代器指针是指向我们的原来的内存的,但是我们的扩容,我们并没有对我们的pos指针进行更新。我们的新的内存是没有pos的。
这时候我们的pos迭代器指针还是指向我们的已经被释放掉的内存空间中,已经开辟好的内存空间里面根本没有我们的pos,这时候他们进行比较这就是有问题的。
那有没有办法来解决呢?
有:
我们把之前的扩容的部分我们进行一下添加,我们把他替换成上面的部分;我们把pos位置也进行一下更新;这时候我们的insert就没有问题了。
我们接着看下一个erase接口:
这个接口的问题其实还是迭代器失效:
我们看我们的这个erase函数接口:
这个是我们的erase函数接口:我们看我们的这个函数,我们的这个函数表示的是把我们的pos位置的数据进行删除,我们还是进到函数里面先判断我们的pos位置是不是合法的。
然后我们设置一个迭代器,设置的位置时我们的要删除的位置的下一个位置,然后我们把我们的这个位置和以后的数据统一的往前面的移动一个位置。
最后我们的_finish--;有效的数据减少一个;
这个函数接口的迭代器失效是什么呢?
我们看我们的这个代码:我们的这个代码设置一个迭代器,然后我们遍历我们的v对象,我们的要求是把所有的偶数删除,
我们的开始的数据时1,2,3,4,5,6,7。
我们的代码执行以后是有问题的。
这是为什么呢?这个就是我们的erase的迭代器失效;
我们看我们的上面的代码:
我们的vs表示的是我们的erase函数,我们的迭代器it指向的位置删除以后,我们的迭代器it就会失效,我们的库里面的erase函数接口会返回我们要删除的位置的下一个位置的迭代器,虽然我们的it迭代器失效了,我们的it下一个位置返回来了,我们看我们的上面的函数:
让我们的这个函数不是偶数的时候,我们的迭代器就++的往后面移动,但是如果这个数就是偶数的时候,我们就调用erase函数来进行删除,但是我们删除以后,我们的it就不能用了,,,我们就可以给我们的it再次的进行赋值,我们把数据删除了,我们的函数就返回了要删除的下一个位置的迭代器;我们再赋值(这就把我们的迭代器it给更新了);然后继续循环。
传值传参和传值返回:
我们看我们的这个函数,我们的第二个参数是我们的模板T的引用,我们的这里的参数为什么不传值过来,却传引用呢?
因为我们的类是一个模板类,我们不确定里面的T是什么类型的,我们可以实例化出任何的类型,如果是int之类的内置类型的类,我们的这个传值或者是传引用都是可以的。
但是如果是自定义类型的话,或者是string,vector之类的话,我们的传值传参会调用他的拷贝构造,这些自定义类型的拷贝构造,如果是自己实现的话,他是会发生深拷贝的,如果是没有写,编译器自己实现的话,实行浅拷贝,我们的自定义类型在这里我们就认为他会产生深拷贝,,,这时候发生深拷贝的代价是比较大的。
所以我们会选择传引用传参,这时候就不会调用拷贝构造;
我们接着来看:
构造函数的实现:
我们来看一下我们的构造函数的实现:
我们的构造函数的第一种是三个成员变量都在初始化列表设置为nullptr;
我们的这种构造函数没有参数,(没有参数,或者参数全部都是缺省值,或者是不写构造函数,这三种是我们的默认的构造函数)。
这个是我们的第二种构造函数,我们的这个构造函数表示的是我们的vector里面的指针指向的数组的数据是n个val值。
我们再看我们的第三种的构造函数的方式:
这种构造函数的构造,我们是使用initializer_list<T>来进行的。
这个就是我们的这种构造函数的用法,我们要什么数据我们直接写到我们的花括号里面就可以了。
析构函数的实现:
这个是我们的析构函数,我们的这个析构函数不难。把内存释放掉,指针置为nullptr就可以了。
拷贝构造的实现:
这个是我们的拷贝构造函数,这个拷贝构造函数,我们的构造函数如果第一个参数是我们的类类型的引用,这个就是拷贝构造函数。
我们的这个函数是把我们的对象v1里面的数据拷贝给我们的this,我们必须是要自己实现拷贝构造函数的,如果我们不自己实现拷贝构造的话,我们的编译器默认生成的拷贝构造函数实行的是浅拷贝,,这个浅拷贝的话,(他是直接把对象v1里面的三个成员变量指针直接拷贝一份给你),这就导致了我们的*this里面的三个指针和v1里面的三个指针指向的都是同样的内存空间,
就跟这个一样,那么这样的结果是什么呢?当我们的对象的声明周期结束的时候,他就会自动的调用析构函数来进行析构,如果我们的两个对象指向的内存是同一块,我们是不是会把这块内存析构两次。。。
所以我们就必须自己实现拷贝构造,实行深拷贝。
赋值重载的实现:
我们的这个图片里面的复制重载:
v1相当于是*this,v2相当于是形参对象v。
我们接着来实现我们的复制重载函数。
首先我们区分一下函数重载和拷贝构造:
拷贝构造是一个已经存在的对象和一个正在进行初始化的对象,把这个已经存在的对象给另一个正在初始化的对象来进行初始化。
复制重载是两个都是已经存在的对象,我们被其中一个对象赋给另一个对象;
首先我们看我们的这个参数,我们的这个函数的参数是我们的类类型的对象,我们之前一直说我们传参的时候我们尽量传引用,传值的话它会调用拷贝构造,拷贝构造的话,深拷贝消耗是比较大的。
我们这里要实现的是复制重载,这个函数我们的目的是把一个对象赋给另一个对象,但是我们的对象里面是含有内存的,那么我们把一个对象赋给另一个对象,我们当然不仅仅是把对象里面的成员变量指针给拷贝一份给另外的一个对象;(必须是深拷贝,不然的话就会发生重复的析构的问题)
所以我们这里的参数是一个传值类型的,会调用拷贝构造(他就会再把原来的内存拷贝一份给我们的形参v,然后我们的this指针调用swap交换函数,把*this和v进行交换,把他们的内存进行交换,然后我们的*this原本的内存就到了形参对象v里面去了,然后我们的拷贝构造得到的v里面的内存就到了*this里面,这时候我们函数结束,我们的对象v生命周期结束,调用析构函数,来把v内存释放掉)。
最后:
我们接着来看:
我们看我们的扩容reserve的函数接口:
我们的这个函数接口也不太对。
我们的这个类我们实现的是一个模板类,里面的T是什么类型的我们不知道,他可能是int类型之类的内置类型,也可能是自定义的类型,这个时候我们的扩容的函数里面的扩容方式是memcpy拷贝,我们看下面的图片:
我们看这个图片,当我们的模板T是自定义的类型的时候,这个时候我们的每个元素里面的数据就和我们的图片中的一样,我们的每个元素都有一个参数,这个参数是我们的指针,指向一个数组,但是我们的memcpy是怎么拷贝的,他会把上面的数据拷贝一份过来,但是,我们的数据不是内置类型是自定义类型的时候,就会发生和我们的上面的图片一样的事情,我们会把指针拷贝一份过来(浅拷贝),这时候原本的内存里面的每个元素里面的指针和新的内存里面的每个元素的里面的指针指向的内存是同一个内存。
然后我们再看这个代码,我们在memcpy拷贝完成以后,我们就会把原来的内存空间释放掉,原来的内存释放的话,里面的数据类型是自定义类型就会调用他们的析构函数,就会把他们里面的指针指向的内存释放。这时候新的内存里面的数据里面的指针就成了野指针了。
相关文章:
vector的实现:
我们之前讲了vector的接口,我们今天来看一下vector的底层的实现: 在gitee上面我们的这个已经实现好了,我们看gitee就可以:vector的实现/vector的实现/vector的实现.h 拾亿天歌/拾亿天歌 - 码云 - 开源中国 我们在这强调比较难的…...
flutter 专题 九十六 Flutter开发之常用Widgets
上一篇,我们介绍了基础Widgets,接下来,我们看一下Flutter开发中一些比较常见的Widget。 Flutter Widget采用现代响应式框架构建,这是从 React 中获得的灵感,中心思想是用widget构建你的UI。 Widget描述了他们的视图在…...
Linux环境下内存错误问题排查与修复
最近这几天服务器总是掉线,要查一下服务器的问题。可以首先查看一下计算机硬件,这是一台某鱼上拼凑的服务器: sudo lshw -shortH/W path Device Class Description system NF5270M3 (To be filled by O…...
flutter 专题 六十八 Flutter 多图片上传
使用Flutter进行应用开发时,经常会遇到选图、拍照等需求。如果要求不高,Flutter图库选择可以使用官方提供的image_picker,如果需要多选,那么可以使用multi_image_picker插件库。multi_image_picker库支持图库管理,多选…...
与总社团联合会合作啦
2025.4.2日,我社团向总社团联合会与暮光社团发起合作研究“浔川代码编辑器v2.0”。至3日,我社团收到回复: 总社团联合会: 总社团联合会已收到浔川社团官方联合会的申请,经考虑,我们同意与浔川社团官方联合…...
技巧:使用 ssh 设置隧道代理访问 github
问题 由于不可知的原因,在国内服务器不能访问 Github。但是有clone代码需求,这里介绍一种可行的方法。 解决办法 使用 ssh 设置代理,让代理服务器请求 github 解决。 第一步 ssh -fND 1080 用户名代理服务器IP这里的意思是监听 1080 端口…...
安装 TabbyAPI+Exllamav2 和 vLLM 的详细步骤
在 5090 显卡上成功安装 TabbyAPIExllamav2 和 vLLM 并非易事,经过一番摸索,我总结了以下详细步骤,希望能帮助大家少走弯路。 重要提示: 用户提供的 PyTorch 安装使用了 cu128,这并非标准 CUDA 版本。请根据你的系统实…...
Linux 进程信号
目录 信号 生活角度的信号 技术应用角度的信号 signal函数 信号概念 用kill -l命令可以察看系统定义的信号列表 信号处理常见方式概览 信号的产生 通过键盘组合键发送信号 通过系统函数向进程发信号 由软件条件产生信号 由硬件异常产生信号 信号的保存 阻塞信号 …...
【学习篇】fastapi接口定义学习
fastapi学习链接:用户指南 1. 路径参数 访问fastapi接口的默认http路径为http://127.0.0.1:8000,/items为定义的接口函数read_item的路径,/{item_id}这个用大括号括起来的参数就是路径参数,接口函数可以通过引用这个路径参数名称…...
第十二步:react
React 1、安装 1、脚手架 npm i -g create-react-app:安装react官方脚手架create-react-app 项目名称:初始化项目 2、包简介 react:react框架的核心react-dom:react视图渲染核心react-native:构建和渲染App的核心…...
MySQL简介
MySQL 是由瑞典 MySQL AB 公司开发的一款开源关系型数据库管理系统(RDBMS),现归属 Oracle 公司。以下是其核心特点及简介: 1. 基础特性 - 开源免费:遵循 GPL 协议,个人及中小型企业可免费使用,…...
AIGC时代Kubernetes企业级云原生运维实战:智能重构与深度实践指南
文章目录 一、AIGC技术栈与Kubernetes的深度融合1. 智能配置生成:从YAML到自然语言2. 动态资源优化:AI驱动的弹性伸缩 二、智能运维体系架构深度解析四维能力矩阵增强实现:关键组件升级代码示例: 三、企业级实战策略深度实践策略1…...
市场波动与交易策略优化
市场波动与交易策略优化 在交易市场中,价格波动是常态。如何有效应对市场的波动,制定合理的交易策略,成为许多交易者关注的重点。本文将探讨市场波动的影响因素,并介绍应对不同市场波动环境的策略。 一、市场波动的影响因素 市场供…...
Prolog语言的移动UI设计
Prolog语言的移动UI设计 随着移动设备的普及,用户界面的设计已成为软件开发的重要组成部分。移动UI设计不仅要注重美观,更要关注用户体验和功能的实现。使用Prolog语言进行移动UI设计,虽然相对少见,但其逻辑编程的特性为复杂的交…...
linux 命令 awk
awk 是 Linux/Unix 系统中一个强大的文本处理工具,尤其擅长处理结构化文本数据(如日志、表格数据)。它不仅是命令行工具,还是一种脚本语言,支持变量、条件、循环等编程特性 1. 基本语法 awk [选项] 模式 {动作} 文件名…...
在 PyQt 加载 UI 三种方法
目录 方法一:使用 uic 模块动态加载 (不推荐用于大型项目) 方法二:将 UI 文件编译为 Python 模块后导入 方法3:使用uic模块直接在代码中加载UI文件 注意事项 总结: 在PyQt中,加载UI文件通常…...
前端快速入门学习2-HTML
一、概述 HTML全称是Hypertext Markup Language(超文本标记语言) HTML通过一系列的 标签(也称为元素) 来定义文本、图像、链接等等。HTML标签是由尖括号包围的关键字。 标签通常成对出现,包括开始标签和结束标签(也称为双标签),内容位于这两个标签之间…...
Cortex-M系列MCU的位带操作
Cortex-M系列位带操作详解 位带(Bit-Banding)是Cortex-M3/M4等处理器提供的一种硬件特性,允许通过别名地址对内存或外设寄存器中的单个位进行原子读-改-写操作,无需禁用中断或使用互斥锁。以下是位带操作的完整指南: …...
【嵌入式-stm32电位器控制LED亮灭以及编码器控制LED亮灭】
嵌入式-stm32电位器控制LED亮暗 任务代码Key.cKey.hmain.c 实验现象 任务 本文主要介绍利用stm32f103C8T6实现电位器控制PWM的占空比大小来改变LED亮暗程度,按键实现使用定时器非阻塞式,其中一个按键切换3个LED的控制状态,另一个按键是重置当…...
抖音热点视频识别与分片处理机制解析
抖音作为日活数亿的短视频平台,其热点视频识别和分片处理机制是支撑高并发访问的核心技术。以下是抖音热点视频识别与分片的实现方案: 热点视频识别机制 1. 实时行为监控系统 用户行为聚合:监控点赞、评论、分享、完播率等指标的异常增长曲线内容特征分析:通过AI识别视频…...
添加购物车功能
业务需求: 用户提交三个字段,服务端根据提交的字段判断是菜品还是套餐,根据菜品或者套餐添加购物车表中。 代码实现 RestController Slf4j RequestMapping("/user/shoppingCart") public class ShoppingCartController {Autowired…...
蓝桥杯备赛 Day16 单调数据结构
单调栈和单调队列能够动态的维护,还需用1-2两个数组在循环时从单调栈和单调队列中记录答案 单调栈 要点 1.时刻保持内部元素具有单调性质的栈(先进后出),核心是:入栈时逐个删除所有"更差的点",一般可分为单调递减栈、单调递增栈、单调不减栈、单调不增…...
AI Agent开发大全第十九课-神经网络入门 (Tensorflow)
(前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站)。 一、从买房困惑到神经元:神经网络的灵感来源 1.1 房地产经纪人的定价难题 想象一个周末的房产中介门店,经纪人小李正面对10份不同房源的报...
Mac VM 卸载 win10 安装win7系统
卸载 找到相应直接删除(移动到废纸篓) 可参考:mac如何卸载虚拟机win 下载 win7下载地址...
torch.nn中的非线性激活使用
1、神经网络中的非线性激活 在神经网络中,**非线性激活函数(Non-linear Activation Functions)**是引入非线性变换的关键组件,使神经网络能够学习并建模复杂的非线性关系。如果没有激活函数,无论神经网络有多少层&…...
【安全】Web渗透测试(全流程)_渗透测试学习流程图
1 信息收集 1.1 域名、IP、端口 域名信息查询:信息可用于后续渗透 IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常 端口信息查询:NMap扫描,确认开放端口 发现:一共开放两个端口&…...
要素的选择与转出
1.要素选择的三种方式 当要在已有的数据中选择部分要素时,ArcMap提供了三种方式:按属性选择、位置选择及按图形选择。 1)按属性选择 通过设置 SQL查询表达式,用来选择与选择条件匹配的要素。 (1)单击主菜单下【选择】【按属性选择】,打开【按…...
C 语言命令行参数:让程序交互更灵活
一、引言 在 C 语言编程领域,命令行参数是一种极为实用的机制,它允许我们在执行程序时,从外部向程序传递数据。这一特性极大地增强了程序的灵活性和可控性,避免了在代码中对数据进行硬编码。比如在开发系统工具、脚本程序时&…...
部署nerdctl工具
nerdctl 是一个专为Containerd设计的容器管理命令行工具,旨在提供类似 Docker 的用户体验,同时支持 Containerd 的高级特性(如命名空间、compose等)。 1、下载安装 wget https://github.com/containerd/nerdctl/releases/downlo…...
SOA 架构
定义与概念:SOA 将应用程序的不同功能单元(称为服务)进行封装,并通过定义良好的接口和协议来实现这些服务之间的通信和交互。这些服务可以在不同的平台和编程语言中实现,彼此之间相互独立,能够以松散耦合的…...
K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority
前言 在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时,常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。 环境信息: Kubernetes版本:1.28.2容器运行时:containerd 1.6.20私有仓库:…...
在线考试系统带万字文档java项目java课程设计java毕业设计springboot项目
文章目录 在线考试系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档(9.9¥带走) 在线考试系统 一、项目演示 在线考试系统 二、项目介绍 1、管理员角色: 考试管理&…...
Axure RP 9 详细图文安装流程(附安装包)教程包含下载、安装、汉化、授权
文章目录 前言一、Axure RP 9介绍二、Axure RP 9 安装流程1. Axure RP 9 下载2. 启动安装程序3. 安装向导操作4.完成安装 三、Axure RP 9 汉化四、Axure RP 9授权 前言 本基础安装流程教程,将以清晰、详尽且易于遵循的步骤介绍Axure RP 9 详细图文安装流程…...
动态规划练习题④
583. 两个字符串的删除操作 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1: 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 &quo…...
多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测
多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测&#…...
爬虫工程师的社会现状
现在网上你只要搜索教程就是韦世东;k哥爬虫教你爬虫方面的逆向知识;然后看着这些逆向js百例;搞得我很尴尬我做了这么多年的爬虫工程师;现在算什么;这些逆向的东西我并没有很深层次的了解;但是工作的内容也依旧解决了;并没有到爬虫工程师非要会那么多逆向才能算的上是合格的爬虫…...
Flink 1.20 Kafka Connector:新旧 API 深度解析与迁移指南
Flink Kafka Connector 新旧 API 深度解析与迁移指南 一、Flink Kafka Connector 演进背景 Apache Flink 作为实时计算领域的标杆框架,其 Kafka 连接器的迭代始终围绕性能优化、语义增强和API 统一展开。Flink 1.20 版本将彻底弃用基于 FlinkKafkaConsumer/FlinkK…...
Vue2 父子组件数据传递与调用:从 ref 到 $emit
提示:https://github.com/jeecgboot/jeecgboot-vue2 文章目录 案例父组件向子组件传递数据的方式父组件调用子组件方法的方式子组件向父组件传递数据的方式流程示意图 案例 提示:以下是本篇文章正文内容,下面案例可供参考 以下是 整合后的关…...
【matplotlib参数调整】
1. 基本绘图函数常用参数 折线图 import matplotlib.pyplot as plt import numpy as npx np.linspace(0, 10, 100) y np.sin(x)plt.plot(x, y, colorred, linestyle--, linewidth2,markero, markersize5, labelsin(x), alpha0.8) plt.title(折线图示例) plt.xlabel(X 轴) p…...
如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)
以下是详细步骤: 1. 创建项目 1.1 打开 IntelliJ IDEA。 1.2 在启动界面,点击 Create New Project(创建新项目)。 1.3 选择 Java,然后点击 Next。 1.4 确保 Project SDK 选择了正确的 JDK 版本&#x…...
Linux红帽:RHCSA认证知识讲解(十 一)配置NTP 时间同步、用户密码策略与使用 autofs 实现 NFS 自动挂载
Linux红帽:RHCSA认证知识讲解(十 一)配置NTP 时间同步、用户密码策略与 NFS 自动挂载 前言一、配置 NTP 时间同步1.1 NTP 简介1.2 安装和配置 NTP 客户端 二、配置新建用户密码过期时间2.1 查看用户密码过期时间2.2 修改密码过期时间 三、使用…...
ffmpeg音视频处理流程
文章目录 FFmpeg 音视频处理流程详细讲解总结音视频处理流程相关的 FFmpeg 工具和命令 FFmpeg 的音视频处理流程涵盖了从输入文件读取数据、编码和解码操作、数据处理、以及最终输出数据的完整过程。为了更好地理解这一流程,我们可以从以下几个关键步骤来分析&#…...
leetcode-代码随想录-链表-移除链表元素
题目 链接:203. 移除链表元素 - 力扣(LeetCode) 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 输入:head [1,2,6,3,4,5,6], val 6 …...
c++与rust的语言区别,rust的主要难点,并举一些例子
C 和 Rust 都是系统级编程语言,它们在设计目标、语法、内存管理等方面存在诸多区别,以下为你详细介绍: 设计目标 C:C 最初是为了给 C 语言添加面向对象编程特性而设计的,之后不断发展,旨在提供高性能、灵…...
从基础算力协作到超智融合,超算互联网助力大语言模型研习
一、背景 大语言模型(LLMs)的快速发展释放出了AI应用领域的巨大潜力。同时,大语言模型作为 AI领域的新兴且关键的技术进展,为 AI 带来了全新的发展方向和应用场景,给 AI 注入了新潜力,这体现在大语言模型独…...
【spring cloud Netflix】Eureka注册中心
1.概念 Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的 需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。同时,服务提供方与Eureka之间通过“心跳” 机制进行监控…...
记录学习的第二十天
今天只做了一道题,有点不在状态。 这道题其实跟昨天的每日一题是差不多的,不过这道题需要进行优化。 根据i小于j,且j小于k,当nums[j]确定时,保证另外两个最大即可得答案。 所以可以使用前缀最大值和后缀最大值。 代…...
7-5 表格输出
作者 乔林 单位 清华大学 本题要求编写程序,按照规定格式输出表格。 输入格式: 本题目没有输入。 输出格式: 要求严格按照给出的格式输出下列表格: ------------------------------------ Province Area(km2) Pop.(…...
【爬虫开发】爬虫开发从0到1全知识教程第14篇:scrapy爬虫框架,介绍【附代码文档】
本教程的知识点为:爬虫概要 爬虫基础 爬虫概述 知识点: 1. 爬虫的概念 requests模块 requests模块 知识点: 1. requests模块介绍 1.1 requests模块的作用: 数据提取概要 数据提取概述 知识点 1. 响应内容的分类 知识点:…...
安装 Microsoft Visual C++ Build Tools
Microsoft Visual C Build Tools下载安装 安装Microsoft Visual C Build Tools是为了在windows系统上编译和运行需要C支持的程序或库(例如某些Python包,Node.js模块等)。 1.下载 打开浏览器,访问 Visual Studio Build Tools下载…...