【字幕】恋上数据结构与算法之014动态数组02接口设计
申请表数组英文单词叫away,而这个数组是怎么样的申请表?数组是一种顺序存储的申请表,什么叫顺序存储?就是数组里面的所有元素,它的内存地址是连续的,大家的内存是连续的,比如说举个例子,在Java里面,我想你有一个int类型的数组是这么这么搞的,那new是什么意思呢?像堆空间申请一段存储空间,像堆空间申请的存储空间,那这三个家伙放哪里?这三个家伙的话就放堆空间了,对不对?
好,那我们看一下,那这个代码在内存中是怎么表现的呢?这个代码在内存中的表现其实就是这个呃瑞,这个尔瑞其实是放占空间的,什么意思呢?像这个代码大家想想尔瑞这个东西啊,而瑞这个东西它肯定是个局部变量,既然它是个局部变量,它肯定是放占空间,那你右边这些数据呢是通过new获取的,所以它肯定是放堆空间,所以这个变量在占空间,这些数据在堆空间,相信大家是可以听懂了。
所以最终它的这个内存结构其实就是占空间里面有个尔瑞这个变量来指向对于空间的这个数组元素。
由于它是数组,由于它是数组,所以它们的内存地址是连续的,怎么个连续法?那假设1个int类型占4个字节,你看这个11它占了4个字节,就是这4个字节,那这每1个地址就对应1个字节,那这是每1个字节的地址值,你看11这个数据它所占据的4个字节对应的内存值分别是10111213,这就是它所占据的4个字节,那下1个元素它是从这里开始,我们可以发现他们内存地址是连续的,你看11的结尾是13,然后下一个14对吧?
就是22的开头,然后呢这个是22的结尾是17,然后呢他下一个18就是33的开头,那这个就足以证明了它们的内存是连续的,这个就是速度,这个就是速度。
在很多编程语言中的速度其实都有一个致命的这个缺点,什么缺点呢?无法动态修改容量,无法动态修改容量什么意思呢?比如说我这句代码,我这句代码只要一写完,这个数组的存储空间就三个元素,就只能放三个元素,这个数组里只能放三个元素,我想以后再往后面再放更多的这个元素,它不可能不可能。
就所以很多编程语言语言里面其实都有这样一个缺点,无法动态修改数字的容量,就当初当初你利用这个数组的时候,你空间是多大,那将来这个数组空间就是多大,它是无法修改这个容量了,但是实际上在很多时候我们实际开发中呢,我们是不是希望数组的容量是可以动态改变的,对吧?
那怎么样实现呢?一般来说我们做法是什么呢?一般来说我们做法就是自己写一个动态速度,自己写一个动态速度,什么意思呢?比如说假设我们自己写一个来,我们直接新建一个,新建完项目呢我们直接在这里用,一样的包名呢我就统一叫com点mj然后叫闷,那这个时候勾选一下这个man方法跟你搞定,那刚刚我们说到一个问题,就是这个数组啊在很多编程语言里面,只要你创建完这个数组,它的容量是无法改变的,比如说我们这样写吧,这个数组的容量永远都是只能放三个元素,我想在里面插入第四个元素,第五个元素是不可能的,那怎么办呢?
很多时候我是不是希望这个数组里面能无限的插入元素元素,能动态的插入元素,一般我们做法就是自己写个动态数组,那自己写个动态数组怎么怎么写呢?
比如说举个例子,假设我们自己写了个百纳米卡,啊瑞动态速度,我们假设我们自己写一个,然后将来用的时候可能就是这样子new一个动态速度,对吧?
我创建了我自己写的动态数组,而拿到我这个动态数组的,我应该提供一个方法,比如说a的添加元素,比如说它可以添加11,就是别人拿到我写的这个东西对吧?就可以添加11,遥控电压十二十三,甚至可以无限的往里面讲,重复的也行,不重复的也行,你看这里面就一共加了很多个元素,是不是应该设置成这样子啊?
而且也允许别人怎么样呢?删除人物,比如说0就将0这个位置的元素删掉,而且也允许别人怎么样呢?允许别人往某个位置添加元素,比如说往二这个位置添加一个33,对吧?应该是这样子。所以相当于就是如果我们能写出这么一个类的话,大家想一想是不是就是动态数组了?是吧?因为可以无限的扩充容量,随便你加要随便你删是这样子的。
那怎么去写这么一个动态数组呢?那现在我们就自己来写一个动态数组,那怎么写呢?首先这个类名呢我就起成叫呃瑞利斯的,我们就叫瑞利斯。好,那相当于是什么呢?相当于我这个released就是动态速度。
注意你看我在敲这个release的时候,你会发现有两个提示,一个是Java点YouTube,这是Java官方自带的一个release的,这个我们不要我们自己写一个我们a历史的所以不要选错了啊,我在选择我们自己的com点MC里面的好那相当于就是我这个就是动态速度,那我现在就是希望实现一个功能,我这个动态速度呢可以无限的扩充容量,所以现在先考虑一个问题,我们这个接口设计的问题,就是我们这个呃瑞丽斯的提供什么接口给别人去调用,提供哪些方法给别人去调用,这个叫接口对吧?
提供一个艾特艾特接口,提供一个本部分是吧?那提供哪些接口给别人呢?那接下来我们就看一下动态数组的一个设计,动态数组的一个设计,动态数组的一个接口设计的问题。我认为的话动态数组至少需要这些东西才叫动态数组。
我们来看一下第一个,别人调用我们size可以告诉他我们一共放了多少个元素,然后还有一个is empty,就是可以判断一下我们这个动态速度是不是空的,里面有没有元素,content就可以判断一下,你我我这个数组里面有没有这个元素,and就把这个元素加到我们数组的后面,get是吧?你给我一个索引,我就返回这个位置对应的元素,还有set什么意思啊?
就是你给我一个元素,我就可以把这个元素覆盖掉这个位置,之前的元素就直接覆盖,就设置这个位置对应的这个元素,那这个这个什么意思啊?
就是往这个位置插入一个元素,然后这个是删除这个位置对应的元素,那这个是查看一下你的这个元素在我动态速度中的一个位置,可立就把所有速度元素给删掉,好,我们看看怎么做这样子,为了节省大家时间,我直接将这个拷过来,注意我考的是什么,我考的是空的,同学们我直接将这个空的考过来,大家没有意见吧?
没必要我一个个敲给你看吧。
这个我敲出来,这个我敲出来,这个注释我写上去,这样你不觉得浪费大家时间吗同学们是吧?这个就非常浪费时间,所以像这种代码我就直接拷贝,不要浪费大家时间好吧?所以你看我们这些接口怎么去设计呢?而且注意啊这些接口是怎么样的?是公共的方法,既然你是提供给外界去调用的,所以你肯定要设计为公共的,肯定要设计为公共的啊那同学们可能有个疑惑,那你之前写的这个stick什么意思?
使得一个是静态方法,这是Java的语法问题,所谓静态方法就是可以通过类名去调用,比如说直接通过man这个类去调用这个man是吧?但是我们现在提供的这个接口怎么样是一定要创建一个创建一个对象才能去调用,所以应该设置一种对象方法,不应该写成死在那个好,这个是Java语法的部分,这个不多说了。
我们看一下这这个怎么去设计,那有了这些接口以后,是不是意味着别人拿到我们的就可以去用了,你看直接类似的艾特对吧就可以了。
好,那现在我们怎么去实现这样子?我现在先保证我这个动态数组能存放什么呢?Int类型的元素先好吧,int类型的这个元素,所以这个时候我我这个接口设计怎么设计呢?首先呃这一元素多少个,这样子我先返回0吧,先让它不报错好吧?然后这个是否为空先返回force,然后肯特斯应该是int,也就是说我添加的元素应该是int类型的,就是我现在先保证我这个能存放int类型的元素,比如说添加11 12对吧?
应该是传一个int类型的这个元素,然后如果你想判断一下这个元素在不在,你将来传了也是硬的,你传一个44 55我就我就判断一下这个东西在不在我这个数组里面,所以应该是硬的,先保证存放硬的,然后添加也是一样,你应该传一个int类型的元素给我,然后你你你要获取某个位置的元素,应该也是int类型的,就是我现在先放int类型的,那既然是int,那就不应该用空,空这个是只能用在对象身上,既然你是int的话,你你只能是整数,我就先返回0好吧?
然后这个site我是怎么做呢?Site是这样做啊,你传一个新的inter元素,然后我就将这个新的in into类型的元素放到index这个位置去,然后index这个位置原来是什么我会返回给你,所以我这里返回的int是什么?
原来的元素,然后这个是往index这个位置插入一个元素,这个是删除删除是吧?删除index这个位置的一个元素,而且我删除的是什么元素,我以后返回给你,比如说我删除的是22,我就把这个22返回给你,这里我先返回对。
这个index of什么意思啊?就是看一下这个元素的位置好,就这样子,好,现在应该是不报错了,我们先来看一下外面,外面我们来看一下点a的对吧?那这个没有问题,比如说往零这个位置插入22,本末伏一删除一这个位置的元素,这个没问题。那接下来这个东西怎么去实现呢?这个东西怎么去实现呢?
相关文章:

【字幕】恋上数据结构与算法之014动态数组02接口设计
申请表数组英文单词叫away,而这个数组是怎么样的申请表?数组是一种顺序存储的申请表,什么叫顺序存储?就是数组里面的所有元素,它的内存地址是连续的,大家的内存是连续的,比如说举个例子…...

ffmpeg硬件解码一般流程
流程 根据硬件名称,查询是否是支持的类型 const char *device_name "qsv"; //cuda enum AVHWDeviceType type av_hwdevice_find_type_by_name(device_name); if(type AV_HWDEVICE_TYPE_NONE) {//如果一个硬件类型是不支持的,打印所有支持…...

微信支付开发-程序开发
一、操作流程图 二、后端代码实现 1、题库实现 a、列表、所有、详情、保存、启禁用、导入答题 b、获取奖品信息、保存奖品信息、 class Question extends Base {// 列表public function getList(){$param $this->request->param();$where [];if(!empty($param[title])…...

【数据结构】排序算法系列——堆排序(附源码+图解)
堆排序 堆排序基于一种常见的**[[二叉树]]结构**:堆 我们前面讲到选择排序,它在待排序的n个记录中选择一个最小的记录需要比较n一1次。本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则无法知道它是最小的记录。 …...

Linux——应用层自定义协议与序列化
目录 一应用层 1再谈 "协议" 2序列化与反序列化 3理解read,write,recv,send 4Udp vs Tcp 二网络版本计算器 三手写序列和反序列化 四进程间关系与守护进程 1进程组 1.1什么是进程组 1.2组长进程 2会话 2.1什么是会话 2.2会话下的前后台进程 3作业控…...

CGAL 从DSM到DTM-建筑物区域提取
CGAL 从DSM到DTM-建筑物区域提取 生成的DSM被用作DTM计算的基础,即地面表示为过滤掉非地面点后的另一个TIN。主要是去除一些建筑物和植被非地形点。 建筑物立面及连通区域提取 建筑物立面的特征是三角形面片的高度变化剧烈。 通过遍历每一个三角面片,…...

Python--编码解码报错
报错问题 错误信息 UnicodeDecodeError: gbk codec cant decode byte 0xac in position 2: illegal multibyte sequence 通常出现在尝试使用 GBK 编码解码某些二进制数据时,但数据中包含了无法被 GBK 解码的字符。具体错误提示是解码器在处理某个字节时发现该字节无…...

大屏可视化常用图标效果表达
1-echarts-雷达图 2-echarts-仪表盘 3-echarts-水球图(利用插件,echarts-liquidfill) 4-element UI tree 添加连接线,修改样式或使用插件(element-tree-line) 5-echarts-漏斗图 6-echarts-饼状图嵌套 optio…...

高通Liunx 系统镜像编译
本文将会介绍如何在编译高通Liunx代码, 具体可以在高通 Linux | 高通下查看相关信息。 编译服务器配置 首先,准备一台Ubuntu 22.04版本主机或者服务器 1,编译Yocto 系统,需要如下一些配置 sudo apt update sudo apt install repo gawk wg…...

105、解析Java中1000个常用类:StringTokenizer类,你学会了吗?
在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序员资料站 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程…...

虚幻引擎 | 实时语音转口型 Multilingual lipsync
实时语音转口型:EPIC的metahuman sdk,NVIDIA的audio2face,都好。本文使用metahuman sdk 需要工具:Metahuman SDK网页账号,获取两日免费tokens https://space.metahumansdk.io/#/unauthorized ———————————…...

vue国际化
前言 现在的大公司都走国际化路线,我们应用程序也不例外。今天就在 Vue3 项目中整一个比较简单的国际化 背景 之前搞国际化的时候,也搜索了很多帖子,但是没有一个可以完整的实现。今天有空搞了一版,大家有什么问题欢迎留言探讨…...

解决tiktoken库调用get_encoding时SSL超时
文章目录 解决tiktoken库调用get_encoding时SSL超时1. 获取词表文件url2. 手动下载词表文件并保存到本地3. 复制并重命名文件4. 环境变量中设置tiktoken cache5. 使用tiktoken库参考资料 解决tiktoken库调用get_encoding时SSL超时 最近在看Build a Large Language Model (From…...

C++从入门到起飞之——继承上篇 全方位剖析!
🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1、继承的概念 2、继承定义 2.1 定义格式 2.2 继承基类成员访问⽅式的变化 3、继承类模板 4、 基…...

【文件包含】——日志文件注入
改变的确很难,但结果值得冒险 本文主要根据做题内容的总结,如有错误之处,还请各位师傅指正 一.伪协议的失效 当我们做到关于文件包含的题目时,常用思路其实就是使用伪协议(php:filter,data,inpput等等)执行…...

UE5源码Windows编译、运行
官方文档 Welcome To Unreal Engine 5 Early Access Learn what to expect from the UE5 Early Access program. 链接如下:https://docs.unrealengine.com/5.0/en-US/Welcome/#gettingue5earlyaccessfromgithub Step 0:找到UE5源码 直接先上链接 https…...

AI大模型与产品经理:替代与合作的深度剖析
在创业的征途中,产品经理常常被外界以一种半开玩笑的口吻提及:“就差一个程序员了。”这句话背后,既蕴含着对产品经理创意与策略能力的认可,也揭示了技术实现环节对于产品成功不可或缺的重要性。然而,随着AI技术的飞速…...

资本的运作方式、贷款的评估标准、杠杆率
在资本领域,涉及到多个角色和复杂的运作机制。以下是一些主要的角色及其运作方式: 主要角色 政府: 发行债券:政府通过发行国债和其他债券来筹集资金,用于公共支出和基础设施建设。货币政策:政府通过调节利…...

Python:抓取 Bilibili(B站)评论、弹幕、字幕等
个人学习需求,需要获取一些 UGC(user generated content),包括 UP 的内容、弹幕、评论等。于是从 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 抓取了一些数据,以下内容仅供学习参考。 目录 1. Python 包:bilib…...

Ubuntu系统Docker部署数据库管理工具DbGate并实现远程查询数据
文章目录 前言1. 安装Docker2. 使用Docker拉取DbGate镜像3. 创建并启动DbGate容器4. 本地连接测试5. 公网远程访问本地DbGate容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统中使用Docker部署DbGate数…...

18063 圈中的游戏
### 思路 1. 创建一个循环链表表示围成一圈的 n 个人。 2. 从第一个人开始报数,每报到 3 的人退出圈子。 3. 重复上述过程,直到只剩下一个人。 4. 输出最后留下的人的编号。 ### 伪代码 1. 创建一个循环链表,节点表示每个人的编号。 2. 初始…...

【Spring Boot】SpringBoot自动装配-Import
目录 一、前言二、 定义三、使用说明3.1 创建项目3.1.1 导入依赖3.1.2 创建User类 3.2 测试导入Bean3.2.1 修改启动类 3.3 测试导入配置类3.3.1 创建UserConfig类3.3.2 修改启动类 3.4 测试导入ImportSelector3.4.1 创建UseImportSelector类3.4.2 修改启动类3.4.3 启动测试 3.5…...

C++:opencv计算轮廓周长--cv::arcLength
cv::arcLength 是 OpenCV 中用于计算轮廓的周长或曲线长度的函数。它是计算图像轮廓特征时非常有用的工具,特别是在处理形状分析、对象检测等任务时。 函数原型 double cv::arcLength(const cv::InputArray& curve, bool closed);curve: 输入的曲线或轮廓&…...

探索学习Python的最佳开发环境和编辑器
Python,作为目前最受欢迎的编程语言之一,因其简洁明了的语法和强大的功能性而备受开发者喜爱。无论是数据科学、机器学习、Web开发还是自动化脚本,Python都有着广泛的应用。选择合适的开发环境和编辑器对于提高编程效率和学习体验至关重要。 …...

【Pycharm】Pycharm创建Django提示pip版本需要升级
目录 1、现象 2、分析 3、本质 前言:经常使用pycharm创建django、flask等项目时候提示pip版本需要升级,解决方案 1、现象 使用Pycharm创建Django项目提示安装Django超时,报错建议pip升级22升级到24 2、分析 之前使用命令升级了pip到了24…...

模拟退火算法(SA算法)求解实例---旅行商问题 (TSP)
目录 一、采用SA求解 TSP二、 旅行商问题2.1 实际例子:求解 6 个城市的 TSP2.2 **求解该问题的代码**2.3 代码运行过程截屏2.4 代码运行结果截屏(后续和其他算法进行对比) 三、 如何修改代码?3.1 减少城市坐标,如下&am…...

衡石分析平台使用手册--替换衡石 metadb
替换衡石 metadb 在使用 HENGSHI SENSE 服务过程中,可以根据业务需要替换 HENGSHI 自带的 metadb。本文讲述使用云服务 PostgreSQL 替代衡石 metadb 的过程。 准备工作 在进行配置前,请在云服务 PostgreSQL 上完成如下准备工作。 [必须] 配置衡石…...

【Unity学习心得】如何制作俯视角射击游戏
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、制作流程 1.制作地图2.实现人物动画和移动脚本3.制作单例模式和对象池4.制作手枪pistol和子弹bullet和子弹壳bulletShell5.制作散弹枪shotgun总…...

【资料分析】常见的坑
in 比较或计数类问题 差别大的基期比较,可以直接用现期进行比较 注意单位可能不同! 注意顺序是从小到大还是从大到小 以及老问题,名字本身就叫XX增量,XX增加值,而非还要另外去算的东东 给出的图表可能是不完整的 2…...

GitLab权限及设置
之前很少关注这些,项目的权限,一般由专门的管理人员设置。 但自己创建的项目自己可以设置权限。下面是一些笔记。 GitLab中用户权限_gitlab 权限-CSDN博客 开发中遇到要将自己这块的代码上传到Git,由其他组的同事拉取后继续开发。上传代码后…...