首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
STL
订阅
Aurora_Trip
更多收藏集
微信扫码分享
微信
新浪微博
QQ
12篇文章 · 0订阅
STL源码分析--traits
traits(译作萃取)是C++中一种特殊的编程技法,它是模板元编程最直接的用例之一。通过traits,可以抽取模板入参类型的各种属性。接下来我们通过STL中最常见的几种traits举例说明。 __type_traits用于判断类型是否为trival(译作平凡)。 如果一个类型…
STL源码分析--rbtree
首先重温下红黑树的定义。同时满足以下条件的二叉树才可称之为红黑树: 根节点为红色。 所有叶子节点为黑色。 如果一个节点为红色,那么它的子节点为黑色。 从任意给定节点向下到达叶子节点,经过相同数量的黑色节点。 _Rb_tree_base定义了红黑树基本的数据结构。 从代码中看到,…
STL源码分析--bitset
bitset中STL中用于表示位图的容器,它支持读写特定bit、从整数或字符串生成bitset对象。bitset大小通过模板参数指定,一旦编译器确定便无法变更,这一点与vector<bool>有差异。 bitset是_Base_bitset的派生类。_Base_bit…
STL源码分析--algorithm
STL中实现了一些跟容器相关的一些算法。这里介绍algorithm头文件中一些有意思的算法实现。 algorithm头文件中定义的find函数可适用于所有定义了迭代器的STL容器。但是一些常用的容器如map/unordered_map/set/unordered_set也定义了…
STL源码分析--functional
一元函数对象,是指这类函数对象只接受一个参数并返回一个参数。 unary_function为STL中所有一元函数对象的基类。它定义了一元函数对象的输入/输出参数类型,其中argument_type为输入参数类型,result_type为输出参数类型,这两种类型由输入模板参数推导…
STL源码分析--hashtable
hash是一个函数对象,它对各种不同类型的值进行哈希,并返回size_t类型的哈希值。在x64平台下,size_t的长度为8 Byte。 这里的哈希算法还是非常简单的。假设字符串长度为n, 最终哈希值为 在$$s[0]\times5^{n-1} + s[1]\times5{n-…
STL源码分析--deque
deque为双向队列,同时支持从队首和队尾插入和弹出值。其数据结构分为两部分,如下图所示: 连续缓冲区_M_map, 元素类型为——Tp*。如果元素值不为NULL,则指向某个内存块;deque中使用__nstart(二级指针类型__Tp**)指向第一个内存块对应的数组元素;__…
STL源码分析--iterator
在STL中,迭代器分为输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器。这里先讲输入迭代器这个大类。 输入迭代器指向的位置只能被顺序读取(iterator_category类型为input_iterator_tag)。在每种迭代器类型中,必须定义iterator_…
STL源码分析--内存分配器
allocator申请和释放内存通过alloc中的静态方法实现。 二级内存池为一个静态数组,数组元素类型为_Obj*,每个数组元素即一个单向链表的头。 一级内存池是一段连续的大缓冲区。其中_S_start_free表示可用内存开头,_S_end_free表示可用内存末尾, _S…
STL源码分析--list
同vector, 申请内存的调用链如下。allocator见STL源码分析--内存分配器 注意用户可为list实例自定义内存分配器,内存分配器类型通过模板参数传入,内存分配器实例通过函数参数传入。_M_get_node从内存分配器中申请一个链表节点_List_node<…