C++标准库分析总结(四)——<Vector、Array、Forward_list设计原则>
本节主要总结标准库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设计原则>的更多相关文章
- C++标准库分析总结(三)——<迭代器设计原则>
本节主要总结迭代器的设计原则,以及iterstor traits的设计作用 1.迭代器遵循的原则 迭代器是算法和容器的桥梁,它是类模板的设计,迭代器必须有能力回答算法提出的问题才能去搭配该算法的使用 ...
- c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑
转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时 ...
- C++标准库分析总结(一)
之前学习过标准库,最近身边有人问到相关话题,故在此做一个总结 1 标准库介绍 C++标准库:C++ Standard Library C++标准模板库:Standard Template Librar ...
- 谈谈两种标准库类型---string和vector
两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...
- C++标准库分析总结(五)——<Deque、Queue、Stack设计原则>
本节主要总结标准库Deque的设计方法和特性以及相关迭代器内部特征 1.Deque基本结构 Deque(双向队列)也号称连续空间(其实是给使用者一个善意的谎言,只是为了好用),其实它使用分段拼接起来的 ...
- Python 3标准库 第十四章 应用构建模块
Python 3标准库 The Python3 Standard Library by Example -----------------------------------------第十四章 ...
- golang标准库分析之net/rpc
net/rpc是golang提供的一个实现rpc的标准库.
- C++标准库分析总结(八)——<仿函数、适配器、istream_iterator、ostream_iterator、bind>
一.仿函数定义 仿函数是STL中最简单的部分,存在的本质就是为STL算法部分服务的,一般不单独使用.仿函数(functors)又称为函数对象(function objects),虽然函数指针虽然也可以 ...
- 在C++11编译环境中,简单自测了一下C++标准库中的string/vector和迭代器,记录一下
#include <iostream> #include <vector> using namespace std; int main() { //////////////// ...
随机推荐
- jquery.fileupload源码解读笔记
基础编程风格 新建 test.html 和 test.js和 main.js和 无论哪种顺序 <body> <script src="/Sandeep/js/jquery ...
- 在我的电脑中删除wps云文档图标
在我的电脑中删除wps云文档图标 右键点击win10左下角选择运行,输入regedit打开注册表后,找到以下注册表路径: HKEY_CURRENT_USER\Software\Microsoft\Wi ...
- sublime text3上设置 python 环境
1. 打开Sublime text 3 安装package control 2. 安装 SublimeREPL Preferences -> package control 或者Ctrl+shi ...
- template中实现加减乘除数学运算
django模板只提供了加法的filter,没有提供专门的乘法和除法运算:django提供了widthratio的tag用来计算比率,可以变相用于乘法和除法的计算. # 加法{{value|add:1 ...
- 记一次有趣的tp5代码执行
0x00 前言 朋友之前给了个站,拿了很久终于拿下,简单记录一下. 0x01 基础信息 漏洞点:tp 5 method 代码执行,payload如下 POST /?s=captcha _method= ...
- 1.利用BeanMap进行对象与Map的相互转换
javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个b ...
- Nginx服务rewrite模块功能说明 网站自动跳转功能
实现域名地址信息跳转,用于做伪静态地址 www.impkk.com/oldboy?edu.html 动态地址 www.impkk.com/oldboy-edu.html 伪静态地址 rewrite ^ ...
- 网上的JAVA语言的某个测试框架
https://github.com/wenchengyao/testLJTT.git 使用maven打包,mvn clean install 在运行的时候,java -jar testLJTT.ja ...
- 软工作业-----Alpha版本第一周小结
软工作业-----Alpha版本第一周小结 Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...
- C#ThreadPool类—多线程
标题:ThreadPool Class 地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.threadpool?redir ...