当前课程知识点:数据结构(上) > 第二章 向量(上) > (a)接口与实现 > 02A-5 复制
内部操作接口copyFrom()的
工作原理以及过程
可以通过这个图来示意
一般地 我们需要从一个数组A中
将介于lo到hi之间的元素
整体复制到当前
仍然为空的一个向量中
具体的操作 大概分为两步
首先在向量内部
开辟出足够的空间
接下来 再将区间内的元素
逐一地复制过来
这样一个过程可以描述并且实现为
这样一段具体的C++代码
我们来看一下
首先申请足够多的空间
我们这里再强调一下
这个区间的宽度可以直接通过
lo和hi之间的一个减法得到
之所以能这样
是因为我们这里包括后面
都会普遍采用这样的形式
也就是当我们在描述一个区间的时候
我们往往是用左闭右开的形式
所以换而言之
这个lo是在这个区间中
最靠左的那个元素
而hi是在右侧第一个
不属于这个区间的那个元素
尽管hi这个元素
有可能压根就不存在
但是我们不妨把它
统一地理解成是一个哨兵
好 这样的话我们就可以通过
hi减lo直接得到区间的宽度
那么有同学可能很细心注意到了
我们这里头为什么还要乘个2呢?
也就是说 我们实际开辟的空间
是我们需要复制的空间的两倍
而不是恰好那么多
这中间的原因
我们在稍后就会介绍到
它的主要的目的在于
这样预留了一些空间之后
就可以使得我们在接下来
足够长的时间之内
不会因为有必要扩容
而打断我们的计算过程
好 接下来还需要对整个
这个向量的有效规模
进行初始化 把它清为0
再接下来 就是复制过程
也就是说
我们对于lo和hi中间的每一个Rank
都要从A这个数组中
取出对应的元素
并将它们顺次的存入到_elem
对应的区间里面去
整体这个循环构成了
这个操作的最重要的部分
所以我们也可以看得出来
算法的复杂度主要是来自于
这样一个循环
这样的一个主体的复杂度是取决于
被复制元素的个数
或者说这个复制区间的宽度
也可以认为是这个向量
通过复制 被创建之后的初始规模
好 这样的话我们就完成了
向量这种最基本的结构
作为一种模板类
它的最基本的一些接口
在后面 我们将要介绍
功能更为复杂的其它的接口
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验