- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态数组vector
vector 的设计的设计
的设计的设计
1. 基本原理基本原理
基本原理基本原理
本质上是一个动态数组本质上是一个动态数组
本质上是一个动态数组本质上是一个动态数组
2. 结构设计结构设计
结构设计结构设计
基类管理内存基类管理内存,派生类提供接口,派生类提供接口
基类管理内存基类管理内存,,派生类提供接口派生类提供接口
3. 编码实现编码实现
编码实现编码实现
利用现有资源利用现有资源,提供一些优化,提供一些优化
利用现有资源利用现有资源,,提供一些优化提供一些优化
4. 常见问题常见问题
常见问题常见问题
vector 的基本原理的基本原理
的基本原理的基本原理
1. 添加对象时添加对象时
添加对象时添加对象时
• vector是本质上一个动态数组是本质上一个动态数组,模拟静,模拟静
是本质上一个动态数组是本质上一个动态数组,,模拟静模拟静
态数组的行为态数组的行为,当容量不足时开辟一块,当容量不足时开辟一块
态数组的行为态数组的行为,,当容量不足时开辟一块当容量不足时开辟一块
更大的内存空间更大的内存空间,复制原来对象到新空,复制原来对象到新空
更大的内存空间更大的内存空间,,复制原来对象到新空复制原来对象到新空
间,间,继续添加新对象继续添加新对象…
间间,,继续添加新对象继续添加新对象
2. 删除对象时删除对象时
删除对象时删除对象时
• 删除对象时删除对象时,对象数目在减少,对象数目在减少,但是容,但是容
删除对象时删除对象时,,对象数目在减少对象数目在减少,,但是容但是容
量不会自动减小量不会自动减小。。
量不会自动减小量不会自动减小。。
vector 的容量增长方案的容量增长方案
的容量增长方案的容量增长方案
假设初始容量为假设初始容量为m(m为非负整数为非负整数)
假设初始容量为假设初始容量为 为非负整数为非负整数
1. 每次增加一个定值每次增加一个定值c(c为非负整型常数为非负整型常数)
每次增加一个定值每次增加一个定值 为非负整型常数为非负整型常数
容量这样增长容量这样增长: m, m+c, m+2c, … (m=0)
容量这样增长容量这样增长
2. 每次增加到原来的每次增加到原来的i倍倍(i为大于为大于1的常数的常数)
每次增加到原来的每次增加到原来的倍倍 为大于为大于 的常数的常数
2
容量这样增长容量这样增长: m, mi, mi , … (m=1)
容量这样增长容量这样增长
通常取第通常取第2种方案种方案,为什么,为什么??
通常取第通常取第 种方案种方案,,为什么为什么??
3. 你有第三种方案你有第三种方案?
你有第三种方案你有第三种方案
每次增加一常数每次增加一常数c的复制代价的复制代价
每次增加一常数每次增加一常数 的复制代价的复制代价
• 假设有假设有n(n是一个变量是一个变量)个对象逐个个对象逐个push_back(该操该操
假设有假设有 是一个变量是一个变量个对象逐个个对象逐个 该操该操
作最常用作最常用)到一个到一个vector里,里,在此过程中在此过程中vector 的容的容
作最常用作最常用 到一个到一个 里里,,在此过程中在此过程中 的容的容
量需要动态增加量需要动态增加,最终达到稳定状态,最终达到稳定状态,假设在容量增,假设在容量增
量需要动态增加量需要动态增加,,最终达到稳定状态最终达到稳定状态,,假设在容量增假设在容量增
长过程中长过程中,发生了,发生了k(k0)次内存分配次内存分配,那么,那么::
长过程中长过程中,,发生了发生了
文档评论(0)