STL源码剖析
hiyajo_salieri
fight for light
展开
-
STL中各个容器的实现基本原理以及互相依赖
STL中一共拥有六大组件:1.算法 2.迭代器 3.容器. 4.仿函数 5.适配器(配接器)6.空间配置器通过阅读侯捷版本的《STL源码剖析》可以知道,STL的实现也是由基本的数据结构来完成的容器大概可以分为关联型容器和序列型容器,序列型容器有vector,list,deque,queue,stack,slist,heap,priority_queuevecto原创 2017-03-05 20:28:48 · 1041 阅读 · 0 评论 -
容器的capacity、max_size以及内存分配
capacity - 容器的成员函数capacity()取得max_size - 容器的成员函数max_size()取得STL容器的capacity属性,表示STL在发生realloc前能允许的最大元素数,也可以理解为预分配的内存空间。例如一个vector v的capacity为5,当插入第6个元素时,vector会realloc,vector内部数据会复制到另外一个内存区域。这样转载 2017-02-27 18:00:27 · 333 阅读 · 0 评论 -
通过bitset输出二进制数
做到笔试题时,难免会有需要将数字的二进制输出的情况,通过STL中的bitset我们可以很轻松地完成这个目标。 有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了st原创 2017-03-06 16:34:09 · 5394 阅读 · 0 评论 -
利用STL中的partition完成快排
学习《STL源码剖析》p354时,发现STL中已有partition函数,这不禁让人联想到c语言实现的快排:int Partition(int k[], int low, int high){ int point; point = k[low]; while( low < high ) { while( low = point ) { high--; } swa原创 2017-04-03 18:30:46 · 2033 阅读 · 0 评论 -
使用vector::reserve来避免不必要的重新分配
关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。) 对于vector和string,如果需要更多空间,就以类似realloc的思想来增长大小。这个类似于realloc的操作有四个部分:分配新的内存块,它有容器目前容量的倍数。在大部分实现中,vector和str转载 2017-03-22 22:56:39 · 323 阅读 · 0 评论 -
从十七年蝉谈起——hashtable的表格大小为什么要选择质数
十七年蝉,同翅目。北美洲一种穴居十七年才能化羽而出的蝉。它们在地底蛰伏17年始出,尔后附上树枝蜕皮,然后交配。雄蝉交配后即死去,母蝉亦于产卵后死。科学家解释,十七年蝉的这种奇特生活方式,为的是避免天敌的侵害并安全延续种群,因而演化出一个漫长而隐秘的生命周期。这是百度百科里关于十七年蝉的介绍,十七年蝉是一个非常奇怪的蝉类,它的生命轮回周期是13年或者17年这样的质数年份。原创 2017-03-30 17:12:37 · 1512 阅读 · 1 评论 -
迭代器失效问题——小心使用erase()
删除指定元素:for (auto it = vec.begin(); it != vec.end(); ) { if (*it ==3) { it = vec.erase(it); } else { it++; } } for (int i=0; i { if (vec[i] == 3) { std转载 2017-05-11 21:31:40 · 852 阅读 · 0 评论 -
C++ STL容器底层实现
STL底层数据结构实现C++ STL 的实现:1.vector 底层数据结构为数组 ,支持快速随机访问2.list 底层数据结构为双向链表,支持快速增删3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(dou...转载 2019-07-10 16:55:38 · 284 阅读 · 0 评论