![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
STL学习
文章平均质量分 96
以侯捷老师的STL源码剖析为知识内容,加上个人总结,以更好的理解cpp的标准模板库
KuoGavin
这个作者很懒,什么都没留下…
展开
-
GNU C++ Allocator分类总结与归纳
文章目录1. new_allocator & malloc_allocator2. 智能 Allocator2.1 智能 Allocator 概念、思路和实现本文以GNU C++为例子进行总结归纳,主要是对GNU C++当中的 Allocator 的类别和个中思想进行分别讲解和整理。同时经过之前的系列文章,可以知道 Allocator 主要用于满足容器中的 Element 进行空间的分配任务需求。也即是,当客户将元素加入容器中,容器必须分配更多内存以保存这些元素,于是容器向其所含的 Alloc原创 2021-04-19 17:49:30 · 1041 阅读 · 3 评论 -
std::allocator——以GNU2.9为例
文章目录1. 标准分配器实现1. 标准分配器实现VC6.0 的 malloc() 内存块布局,由debug header(内含cookie(4bytes))、block size(client所获得pointer指向该块头部)、debug tail、pad(字节填充,使得整个所分配内存块字节数大小为16的倍数)和cookie(共两个cookie,记录该内存块必要信息);VC6.0、BC5 和 GNU2.9 标准分配器 allocator 实现均是以 ::operator new() 和 ::ope原创 2021-04-06 22:05:53 · 494 阅读 · 0 评论 -
C++ lambda表达式
lambda 表达式表示一个可调用的代码单元,用于定义并创建匿名的函数对象,以简化编程工作,其编译器实现方式是创建一个仿函数对象。可以将其理解为一个未命名的匿名内联函数。原创 2021-03-10 11:33:44 · 279 阅读 · 0 评论 -
STL适配器详解
适配器本身是一个新的自定义类型 class/struct,其中会包含一个或多个辅助的所适配的类型的成员,并对内含的成员的接口进行改造,再以新的适配器类型向外部提供接口。原创 2021-03-08 21:43:44 · 2680 阅读 · 4 评论 -
STL仿函数
文章目录1. 如何将操作作为算法的参数 & STL的选择2. 仿函数能够进行配接的条件3. 仿函数的分类仿函数的位置仿函数(functor)作为STL六大组件(components)中的一个,也称函数对象(function object),其实就是重载了operator()操作符的 struct / class。1. 如何将操作作为算法的参数 & STL的选择若是想将某种操作当作算法的参数,有如下唯二两种方式:将操作(可能含有数条以上的指令)设计为一个函数,再将函数指针作为原创 2021-03-06 21:57:49 · 411 阅读 · 0 评论 -
STL迭代器详解
文章目录1. 迭代器(iterator)是一种智能指针(smart pointer)2. 迭代器相应类型(associate types)不同于OOP(Object Oriented Programming)将数据(datas)和行为(methods)组织在一起的思想,STL的中心思想GP(Generic Programming)在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以胶着剂将它们撮合在一起。那么之间的胶着剂就是迭代器(iterator)。原创 2021-03-05 16:39:26 · 2574 阅读 · 1 评论 -
STL容器详解
文章目录1. 容器的结构与分类2. 序列容器(Sequence Containers)2.1 list 容器2.2 vector 容器2.3 array 容器2.4 deque 容器2.4.1 queue 容器2.4.2 stack 容器3. 关联容器(Associative Container)3.1 set / multiset 容器3.2 map / multimap 容器3.3 unordered 容器STL的容器可分为序列容器和关联容器两大类。序列容器:有数组(array)、向量(vect原创 2021-03-03 22:05:45 · 1709 阅读 · 0 评论 -
红黑树性质、插入节点和rb_tree容器
文章目录1. RB-tree 性质2. RB-tree 插入3. STL非公开rb_tree容器3.1 rb_tree 数据结构3.2 rb_node 设计实现3.3 __rb_tree_iterator 设计实现1. RB-tree 性质RB-tree(红黑树)是一种颇具历史并被广泛运用的平衡二叉树。相比于另一种平衡二叉树AVL-tree,其对平衡性规则的要求要宽松一些,且插入删除操作更便于控制,但是搜寻平均效率几乎相等。所谓RB-tree,不仅是一个二叉搜索树,而且必须满足以下规则:1. 每原创 2021-03-02 22:00:29 · 406 阅读 · 2 评论 -
typename关键字
在学习STL的过程当中,经常会遇到一些让人难以理解的C++代码,比如:typedef typename std::vector<T>::size_type size_type;看起来它应该是定义一个类型别名,但是typedef使用方式应该是typedef + 原类型名 + 新类型名(typedef具体使用方法可移步 typedef和#define的用法与区别 ),为何此处多了个typename?typename又是什么东西?typedef char* PCHAR;只记得泛型编程(GP原创 2021-02-26 14:12:14 · 556 阅读 · 0 评论 -
sort函数及其元素排序方式定制
1. 引出及例题《剑指Offer》面试题45:把数组排成最小的数: 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例 2:输入: [3,30,34,5,9]输出: "3033459"思路: 其解法是贪心的(贪心策略的证明详见书229页),就是将数组中的所有数字转换为字符串,再将各个字符串按照字典序从小到大进行排列,并进行拼接即为所求解的字符串,其中进行排序的过程会遇到大数问题,所以按原创 2021-01-16 17:28:15 · 640 阅读 · 1 评论