
STL底层原理
文章平均质量分 67
基于《STL源码剖析》做的读书笔记
皇皇零岁
人类的悲喜并不相通
展开
-
STL超全总结和梳理
常用容器的特点及适用情况string:与vector相似的容器,专门用于存储字符。随机访问快,在尾位置插入/删除速度快array:固定大小数组。支持快速随机访问,不能添加或者删除元素vector:可变大小的数组。底层数据结构为数组,支持快速随机访问,在尾部之外的位置插入或者删除元素可能很慢list:双向链表。底层数据结构为双向链表,支持双向顺序访问。在list任何位置插入/删除速度很快s_list:单向链表。支持单项顺序访问。在forward_list任何位置插入/删除速度很快deque:..原创 2022-04-02 16:07:36 · 687 阅读 · 0 评论 -
空间配置器 & 仿函数 & 配接器
仿函数又名函数对象function objects。函数指针可以达到“将整组操作当作算法的参数”,如将operator<包装成一个所谓的仿函数,但是函数指针毕竟毕竟不能满足STL对抽象性的要求。可配接adaptable的关键unary_functionbinary_function算术类仿函数关系运算类仿函数逻辑运算类仿函数证同,选择,投射空间配置器sub-allocation隐藏在container后面,allocator。不称为内存配置原创 2022-04-02 15:50:04 · 129 阅读 · 0 评论 -
详细总结STL自带的【算法】
算法质变算法(会改变区间内元素内容)和非质变算法,根据需求不同寻找不同的迭代器(只读只写等等)copy()set相关算法考虑重复元素后set运算结果和直观结果有细微差别!操作都稳定set_union 并集注意:相同取S1的元素!默认已经排序好了,用了归并排序中合并时一样的思想set_intersection 交集set_different差集S1-S2set_symmetric _difference 对称差(s1-s2)∪(s2-s1)其他算法adjacen原创 2022-04-02 15:38:12 · 592 阅读 · 0 评论 -
关于STL的【迭代器】
迭代器构造方法:vector< int>::iterator或 list< int>::iterator …… ,用*来进行访问元素值即可,可以看作一种行为类似指针的对象,重点是内容提领和成员访问traits:多一层间接性,可以包装原生指针,注意const int* 要萃取出int还要再进行依次特化value typedifference type:两个迭代器之间的距离或容器的最大容量,同样针对原生指针和原生的pointer-to-const设计“偏特化”原创 2022-03-29 21:58:20 · 161 阅读 · 0 评论 -
阅读【hashtable】源码
hashtable散列表,常数平均时间表现。可被视为一种字典结构。空间换时间:上述解决方法始终导致array太大,因此创建hash function,限制TableSize。解决碰撞线性探测:负载系数(元素个数/表格大小:限制在0-1之间)。目标空间被占用则向下寻找(尾部连着头部)直到空格或符合者惰性删除:只能标记删除平均插入成本的成长幅度远高于负载系数的成长幅度:主集团primary clustering二次探测:一般更改为+ -,而不仅仅是+假设表格原创 2022-03-29 21:51:16 · 111 阅读 · 0 评论 -
详细解读【map】源码
map会根据元素键值自动被排序,所有元素都是pair,同时拥有实值value和键值key,其pair是<key,pair>。键值不可改变,正值可以。新增删除操作后,之前的迭代器依然有效。以RB-tree为底层机制,和set一样也是调用即可。#ifndef __SGI_STL_INTERNAL_MAP_H#define __SGI_STL_INTERNAL_MAP_H__STL_BEGIN_NAMESPACE#if defined(__sgi) && !def原创 2022-03-29 21:31:00 · 357 阅读 · 0 评论 -
解读【set】源码
set所有元素根据键值自动排序,键值就是实值,不允许重复键值。不可通过迭代器改变set元素值,是一种constant iterators与list相同,当客户端对它进行元素新增操作insert或删除erase时,操作之前所有迭代器仍然有效。以RB-tree为底层机制。另一种用hash-table为底层机制的set为hash_set注意定义迭代器的方式:set< int>::iterator ite1=isct.begin()#ifndef __SGI_STL_INT原创 2022-03-29 21:28:41 · 321 阅读 · 0 评论 -
无敌重要的【RB-tree】
节点非红即黑;根节点黑色;若节点红,子节点必黑;任一节点至NULL(树尾端)的任何路径,所含黑节点树必然相同原创 2022-03-29 21:22:49 · 194 阅读 · 0 评论 -
【heap】是算法不是容器哦
前面是一些小Tips和关键点,以及代码里不好理解的点,后面是源码,重要的函数全部都写了满满的注释嘿嘿嘿!为什么是这种形式呢,因为看书的时候就是讲解源码的,于是顺着读代码的时候就加了注释。原创 2022-03-26 22:21:01 · 857 阅读 · 0 评论 -
轮到【Stack和queue】了
前面是一些小Tips和关键点,以及代码里不好理解的点,后面是源码,重要的函数全部都写了满满的注释嘿嘿嘿!为什么是这种形式呢,因为看书的时候就是讲解源码的,于是顺着读代码的时候就加了注释。原创 2022-03-26 22:13:50 · 307 阅读 · 0 评论 -
【deque】底层有点复杂
前面是一些小Tips和关键点,以及代码里不好理解的点,后面是源码,重要的函数全部都写了满满的注释嘿嘿嘿!为什么是这种形式呢,因为看书的时候就是讲解源码的,于是顺着读代码的时候就加了注释。原创 2022-03-26 22:09:06 · 364 阅读 · 0 评论 -
一起阅读【list】的源码吧
前面是一些小Tips和关键点,以及代码里不好理解的点,后面是源码,重要的函数全部都写了满满的注释嘿嘿嘿!为什么是这种形式呢,因为看书的时候就是讲解源码的,于是顺着读代码的时候就加了注释。原创 2022-03-26 22:02:22 · 1011 阅读 · 0 评论 -
一起拥抱【Vector】的源码吧
前面是一些小Tips和关键点,以及代码里不好理解的点,后面是源码,重要的函数全部都写了满满的注释嘿嘿嘿!为什么是这种形式呢,因为看书的时候就是讲解源码的,于是顺着读代码的时候就加了注释。原创 2022-03-26 21:55:28 · 177 阅读 · 0 评论