vector数据安排与操作和array相似。两者的区别在于array是静态空间一但确定大小就不能改变,要换大小只能有程序员去声明新的array空间,将旧空间的变量挨个赋值过去。而vector是动态空间,随着放入的元素增多,它的内部机制会自行扩充空间来容纳元素。

首先来看看vector的源码,Vector内部主要涉及start ,finish ,end_of_storage三个指针因此大小为12。

template<class T,class Alloc=alloc>
class vector
{
public:typedef T value_type;typedef value_type* iterator;  // vector迭代器就是普通指针typedef value_type& refrence;typedef size_t size_type;
protected:iterator start;iterator finish;iterator end_of_storage;
public:iterator begin() {return start;}iterator end() {return finish;}size_type size() const {return size_type(start-finish);} size_type capacity()const {rteturn size_type(end_of_storage-start);}bool empty() const {return begin()==end();} // 这样设计refrence operator[](size_type n){return *(begin()+n);}
}

vector迭代器

vector维护的是一个连续空间,因此不论元素类别如何,普通指针就满足vector迭代器的所有需求,因为迭代器所需要进行的操作,如operator++(),operator*(),operator--(),operator->(),operator+=(),operator-=()。所以vector提供的是Random Access Iterator。

vector数据结构

vector的数据结构很简单,连续存储空间。它由start ,finish,end_of_storage三个迭代器组成。其中由[start,finish]所构成的空间为数据存储空间size(),而[start,end_of_storage]所构成的空间为容器的容量capacity。换句话来说vector容器的容量将永远大于等于vector内部所存储元素的大小。一但容量等于元素大小,便是满载,下次再有新的元素增加就要开辟新的空间存放这组vector容器。

增加新空间的步骤

由const size_type len = old_size != 0 ? 2*old_size:1;便能看出二倍生长,再由代码中的allocate(len)和destroy(begin(),end()),可以看出,开辟了一个两倍的新空间,且对原空间的元素使用析构(destroy),最后释放原空间(dealloacate)。

下图给出vector容器的萃取器:

6、vector深度探析相关推荐

  1. 一文带你深度探析:软硬科技协同创新正当时

    要说今年科技圈内最大的热点话题是什么?那必然是ChatGPT!ChatGPT推出约两个月后,月活跃用户超过1亿,成为史上增长最快的消费者应用程序.ChatGPT的爆火,随之而来的是有关人工智能技术未来 ...

  2. asio定时器深度探析

    一次性定时 asio::io_context io; asio::steady_timer t(io, asio::chrono::seconds(5)); t.async_wait([](const ...

  3. 高通量测序技术和序列拼接算法探析

    高通量测序技术和序列拼接算法探析 时间:2019-05-27 来源:计算机科学 作者:周卫星,石海鹤 本文字数:16853字 摘    要: 高通量测序 (High-throughput Sequen ...

  4. 实录 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新

    1 月 10 日(周四)晚 8 点,平安人寿智能平台团队资深算法工程师姚晓远在 PaperWeekly 直播间为大家带来了对话生成模型的探析与创新主题分享,并且介绍了平安人寿基于业务场景的技术探索成果 ...

  5. 今晚直播 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新

    随着深度学习的发展,人机对话技术取得重大突破,成为人工智能领域的热点研究问题. 人机对话作为人机交互系统的核心功能之一,发挥着十分重要的作用.相比其他传统交互方式,人机对话可在聊天的过程中完成输入信息 ...

  6. 直播 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新

    随着深度学习的发展,人机对话技术取得重大突破,成为人工智能领域的热点研究问题. 人机对话作为人机交互系统的核心功能之一,发挥着十分重要的作用.相比其他传统交互方式,人机对话可在聊天的过程中完成输入信息 ...

  7. 新工科背景下的大数据体系建设探析

    新工科背景下的大数据体系建设探析 王元卓,于建业 中国科学院计算技术研究所,北京 100190 北京物资学院信息学院,北京 101149   摘要:大数据产业迅猛发展,对大数据人才培养提出了巨大挑战. ...

  8. 全球及中国商业航天产业应用模式探析及投资布局态势分析报告2021-2027年版

    全球及中国商业航天产业应用模式探析及投资布局态势分析报告2021-2027年版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订 ...

  9. ChatGPT: 人工智能对话模型的前沿技术与应用探析

    ChatGPT: 人工智能对话模型的前沿技术与应用探析 引言 ChatGPT作为一种人工智能对话模型,在近年来引起了广泛的关注和研究.随着人工智能技术的不断发展,ChatGPT作为一种前沿技术在人机对 ...

最新文章

  1. 嵌入式为什么不受欢迎?谈谈我对嵌入式的理解!
  2. 全球与中国聚硫聚合物市场发展前景与投资可行性分析报告2021年版
  3. 18 | 案例篇:内存泄漏了,我该如何定位和处理?
  4. MySQL高级 orderby 优化
  5. USACO2.3【dfs,dp,背包】
  6. go分析和kegg分析_干货预警:3分钟搞定GO/KEGG功能富集分析(2)
  7. html载入hta文件,HTA文件去除html控件认证和接收命令行参数
  8. Oracle使用Sql把XML解析成表(Table)的方法
  9. 【华为云技术分享】【一统江湖的大前端】PPT制作库impress.js
  10. 数据可视化、模板框架、动态控件、可视化大屏、数据原型、监控平台、图表元件库、数据看板、驾驶舱、统计图表、消防、大屏展示、安防、智慧城市、旅游、运输、医疗卫生、贸易、电力、政务、水质、工业园区环境监测
  11. python get函数 i_Python高阶技巧,你 GET了吗?
  12. 关于C#中Thread.Join()的一点理解
  13. wget下载报错403
  14. FC SAN - 光纤通道存储区域网络
  15. VMware Workstation 不可恢复错误: (vmx)Exception 0xc0000006 (disk error while paging) has occurred.
  16. vue3笔记十(vue3 tsx使用)
  17. POJ 3264 线段树
  18. 【分享视频资源】React JS教程
  19. discuz防灌水机制
  20. 基于AT89C52的超声波测距仪

热门文章

  1. 服务器端脚本语言的比较
  2. 李彦宏论“性格决定命运”
  3. 苹果天气不显示_用了6年苹果手机!直到今天才发现,闹钟还能检测手机真假...
  4. 使用burpsuit捕获手机流量
  5. 如何批量去除word文本中的数字内容
  6. JUC 学习 - JMM
  7. H.265/HEVC结构
  8. 自动驾驶入门技术(2) —— 车辆定位与高精地图
  9. Android如何接入渠道SDK的闪屏页?一个activity就够了
  10. dump java 原理_dumpsys实现原理