网站大量收购独家精品文档,联系QQ:2885784924

动态数组vector.pdf

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档