C++ STL 体系结构与内核分析
ai_XZP_master
本人计算机专业,主要研究人工智能、计算机视觉、物体检测。
展开
-
原创 C++ STL 体系结构与内核分析(七)万用的hash function/cout
万用的hash function设计成一般的函数/成员函数,如下图所示蓝色部分做的内容:都是一样的函数hash_val,通过输入参数判断使用哪一个。代码实现:输出每个篮子有多少元素。形式3:宣告申明方式cout接受了上述类型,所以可以使用cout << 输出。自己写需要操作符重载...原创 2020-04-07 22:14:25 · 132 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(六)彷函数适配器/bind/reverse_iterator/inserter/ostream_iterator
新型适配器bindbind替代以下方法:可以绑定四种类型,如上图所示。迭代器适配器reverse_iterator取值动作最关键,对逆向取值就是对正向迭代器后退一步。inserterX适配器...原创 2020-04-06 20:52:53 · 181 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1
彷函数Functors算法要求一些准则,给一些特定操作,去告诉算法。下图是标准库列举的三大类:算法类/逻辑运算类/相对关系类非标准,传递x进去,传出first.四个sort算法:default/function/object/explicitly,都是从小到大排序第五个another comparision,从大到小。写入的适配器融入STL,彷函数适配条件:要会...原创 2020-04-05 17:29:15 · 208 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(四)STL六大部件-关联式容器hashtable/hash_set/unordered
hashtableobject可以折射成一个数值,放在一个容器里面。相当于一个号码,需要多少空间才行?如下图所示:空间足够直接分配,空间不足将空间压缩:H%M,比如将第100个为止放到容器H%100的位置。这种方法容易数据碰撞。碰撞的话就变成一条链表串在一起。但是链表过长搜寻的时间复杂度很高,所以如果发现链表过长需要打散。把篮子扩增为两倍(附近,不是一定是两倍)。53个篮子变成...原创 2020-04-03 18:20:33 · 158 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(四)STL六大部件-关联式容器set/multiset/map.multimap
setset元素key不可重复。multiset可以重复。具体概念如下:map每个元素是key和value,无法改变key,能改data。map结构源代码map<int, string> imap;整数做key,string做data。test[]可以创建test...原创 2020-04-02 17:54:14 · 133 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(四)STL六大部件-deque/stack
deque双向开口,两端都可以扩充。通过分段将内存串起来。map那一段是vector指向那五个缓冲区。如果将缓冲区装满元素,得继续分配缓冲区,这就是往前deque。分段连续。回到控制中心,迭代器cur作用指向内存缓冲区。protected里面参数大小:迭代器(4*4= 16)*2+ 4*2 = 40;如上图所示,判断position是靠近前端还是尾端,插入距离他比较...原创 2020-04-02 16:21:08 · 152 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(四)STL六大部件-容器array
arrayforward_list单向链表容器deque-双向开口的空间分段连续,类似于内存分页底层源代码内存大小:一个deque本身大小 32(4*4+ 4*4)+ 8 = 40字节迭代器insert()插入一个元素从比较短的那个方向推。首先判断cur为止是否在前端,如果不满足则看看是不是最尾端。两个都不满足则会调用辅助函数...原创 2020-04-01 18:59:06 · 168 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(四)STL六大部件-容器vector
1、vector用vector来存数据如果数据量过大需要扩增内存。vector扩增内存是二倍成长,不是从原有的序列扩增,而是新建一个内存空间扩增两倍,然后将原来的vector容器里的数据拷贝到新的容器中。这个操作很费时间。扩容细节vector迭代器...原创 2020-03-30 17:14:26 · 209 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(四)STL六大部件-容器结构与分类/List/迭代器设计原则
容器结构与分类标准库里面很少继承。两个容器之间有关系,但是是复合关系没有继承关系。容器List双向链表/单链表,里面又一个list_node节点,data是绿色部分,还有向前向后指针void* void_point,iterator是下图红点,因为链表是不规则空间,不能使用单向链表,使用快慢指针iterator用法:在list取iterator,下面是指针操作 ++/*...原创 2020-03-29 16:54:16 · 216 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(四)STL六大部件-分配器Allocate
分配器Allocate分配器效率-分配器分配内存。new一个对象,最后也会调用malloc.如下图所示:在VC6对allocate的支持如下:创建用new,回收的时候调用delete。example在右下角灰色部分包括创建allocator和deallocate。内部还是调用C的malloc和free来操作。因此会带来大量的额外开销。尽量少使用malloc,使用...原创 2020-03-29 16:03:07 · 246 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(三)面向对象编程和泛型编程
OOP VS GPlist不能使用sort排序是因为他的迭代器不同,sort函数只有randomAccessIterator才能如此操作。操作符重载和template模版模版三大类:类模版、函数模版和成员模版将这个类的类型,先不写出来,用一个T来代替,再使用的时候编译器进行推导得到输入的类型。指定的类型,泛化之外写特化(指定类型就叫特化如...原创 2020-03-29 13:51:50 · 186 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(二)容器
容器结构与分类循序式:array固定死了/vector自动扩充/Deque双队列,先进先出/list-双向环状链表/Forward-List-单向链表可以放更多的元素/大量查找需要Associative Containera:使用红黑树存储,左右自己平衡。set key和value不分,放的元素不能重叠/map包括value和key,放的元素不能重叠/Multiset或者Multimap可...原创 2020-03-27 17:56:30 · 162 阅读 · 0 评论 -
C++ STL 体系结构与内核分析(一)
目录C++标准库STL 六大部件容器C++标准库STL 六大部件C++STL主要由6个组件(Components)组成,分别是:容器(Containers)、分配器(Allocators)、算法(Algorithms)、迭代器(Iterators)、适配器(Adapters)、仿函数(Functors)。最重要的:容器和算法。下面介绍每个部件基...原创 2020-03-26 17:31:50 · 305 阅读 · 0 评论