本节主要总结标准库Vector和Array的设计方法和特性以及相关迭代器内部特征

1、Vector

1.1 Vector 内部实现

  Vector是自增长的数组,其实在标准库中没有任何一种容器能原地扩充,它给人假象的扩充只是在内存的另外一个地方找到一个大的空间,再把原来的数据搬过去;

  Vector只需要3根指针就能完全控制内存的增长,所以在32位机器上sizeof大小为3*4=12

注意:号称连续增长的容器都必须实现中括号[]的运算符重载

1.2 Vector增长模型

  我们使用push_back放元素时它会检查当前是不是有足够空间,在我们一开始创建Vector时,它的大小就是0,所以第一次内存扩充为1,在这个之后如果需要扩充那就扩充到2*现在容器size的大小,之后调用分配器扩充内存,再把原来内容拷贝到新的地方,接着把新的元素安插到末尾,还要进行删掉之前地方的元素释放空间

注意:由于每次扩充都会进行大量拷贝,拷贝就会调用拷贝构造函数和析构函数,会有很大的开销

1.3 Vector迭代器

  算法调用迭代器进行操作时,会调用萃取机询问相关的类型

1.4 新版本内部继承关系

2、Array

2.1 Array内部实现

  Array就是C语言中数据的包装类,正因为有了这层包装,Array才能享受标准库给予6大部件的便利;

  Array必须初始化给定空间大小,期间不允许改变大小,也是连续空间,只要是连续空间其迭代器就可以用自然指针来询问。

3、Forward_list

  forward_list实质就是单向链表

C++标准库分析总结(四)——<Vector、Array、Forward_list设计原则>的更多相关文章

  1. C++标准库分析总结(三)——<迭代器设计原则>

    本节主要总结迭代器的设计原则,以及iterstor traits的设计作用 1.迭代器遵循的原则 迭代器是算法和容器的桥梁,它是类模板的设计,迭代器必须有能力回答算法提出的问题才能去搭配该算法的使用 ...

  2. c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑

    转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时 ...

  3. C++标准库分析总结(一)

    之前学习过标准库,最近身边有人问到相关话题,故在此做一个总结 1 标准库介绍 C++标准库:C++ Standard Library C++标准模板库:Standard Template Librar ...

  4. 谈谈两种标准库类型---string和vector

    两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...

  5. C++标准库分析总结(五)——<Deque、Queue、Stack设计原则>

    本节主要总结标准库Deque的设计方法和特性以及相关迭代器内部特征 1.Deque基本结构 Deque(双向队列)也号称连续空间(其实是给使用者一个善意的谎言,只是为了好用),其实它使用分段拼接起来的 ...

  6. Python 3标准库 第十四章 应用构建模块

    Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章   ...

  7. golang标准库分析之net/rpc

    net/rpc是golang提供的一个实现rpc的标准库.

  8. C++标准库分析总结(八)——<仿函数、适配器、istream_iterator、ostream_iterator、bind>

    一.仿函数定义 仿函数是STL中最简单的部分,存在的本质就是为STL算法部分服务的,一般不单独使用.仿函数(functors)又称为函数对象(function objects),虽然函数指针虽然也可以 ...

  9. 在C++11编译环境中,简单自测了一下C++标准库中的string/vector和迭代器,记录一下

    #include <iostream> #include <vector> using namespace std; int main() { //////////////// ...

随机推荐

  1. jquery.fileupload源码解读笔记

    基础编程风格 新建 test.html  和 test.js和 main.js和 无论哪种顺序 <body> <script src="/Sandeep/js/jquery ...

  2. 在我的电脑中删除wps云文档图标

    在我的电脑中删除wps云文档图标 右键点击win10左下角选择运行,输入regedit打开注册表后,找到以下注册表路径: HKEY_CURRENT_USER\Software\Microsoft\Wi ...

  3. sublime text3上设置 python 环境

    1. 打开Sublime text 3 安装package control 2. 安装 SublimeREPL Preferences -> package control 或者Ctrl+shi ...

  4. template中实现加减乘除数学运算

    django模板只提供了加法的filter,没有提供专门的乘法和除法运算:django提供了widthratio的tag用来计算比率,可以变相用于乘法和除法的计算. # 加法{{value|add:1 ...

  5. 记一次有趣的tp5代码执行

    0x00 前言 朋友之前给了个站,拿了很久终于拿下,简单记录一下. 0x01 基础信息 漏洞点:tp 5 method 代码执行,payload如下 POST /?s=captcha _method= ...

  6. 1.利用BeanMap进行对象与Map的相互转换

    javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个b ...

  7. Nginx服务rewrite模块功能说明 网站自动跳转功能

    实现域名地址信息跳转,用于做伪静态地址 www.impkk.com/oldboy?edu.html 动态地址 www.impkk.com/oldboy-edu.html 伪静态地址 rewrite ^ ...

  8. 网上的JAVA语言的某个测试框架

    https://github.com/wenchengyao/testLJTT.git 使用maven打包,mvn clean install 在运行的时候,java -jar testLJTT.ja ...

  9. 软工作业-----Alpha版本第一周小结

            软工作业-----Alpha版本第一周小结   Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...

  10. C#ThreadPool类—多线程

    标题:ThreadPool Class 地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.threadpool?redir ...