STL
文章平均质量分 63
今天你头秃了吗?
这个作者很懒,什么都没留下…
展开
-
map的内存释放
map在erase和clear后是否会马上释放内存参考链接:关于c++中map的内存占用问题 (原文)原文提到map在erase和clear后不会立马释放内存,而是采用类似内存池的机制,对申请的内存进行”预留“,在一段时间内不使用才会予以“释放”。 (在编译器MSVC1930的实际测试中)大内存空间在erase和clear后会立马释放 (猜测)小内存空间在erase和clear后会被内存池回收delete+erase:编译器M原创 2022-05-08 16:26:04 · 4221 阅读 · 0 评论 -
【STL】hashtable unordered(未完成)
hashtable源码实现G2.9版本的hashtable源码hashtable的buckets_vector的大小通常为质数,如果元素个数大于buckets_vector的大小时,需要采用rehashing,即需要扩充buckets_vector的大小,扩充为当前大小两倍附近的一个质数5个需要注意的模板参数:Key,Value,HashFcn,ExtractKey,EqualKeyKey就是Key,节点的大小关系是按Key排的;Value是整个node,而不是key对应的data;HashFc原创 2021-02-01 18:28:59 · 87 阅读 · 0 评论 -
【STL】rb_tree (multi)set (multi)map
rb_tree源码实现G2.9版本的rb_tree源码rb_tree底层实现红黑树,其示意图和代码如下:4个需要注意的模板参数:Key,Value,KeyOfValue,CompareKey就是Key,节点的大小关系是按Key排的;Value是整个node,而不是key对应的data,比如对于map来说,Value就是个pair;KeyOfValue代表如何从Value中提取出Key,也就是一个可调用对象的类型,传入一个Value,返回对应的Key;Compare就是比较Key的可调用对象的类型原创 2021-02-01 16:20:23 · 165 阅读 · 0 评论 -
【STL】容器适配器 queue和stack
queue源码实现stack源码实现stack和queuequeue和stack里面都内含一个sequence(底层容器),queue和stack都是通过调用sequence中的一部分功能来实现的queue和stack的默认sequence都是deque,list也可以满足queue和stack所有成员函数的要求,但stack可以选择vector作为底层结构,queue不可以选择vector作为底层结构,因为vector没有pop_front(),另外stack和queue都不可以选择set原创 2021-01-25 17:56:48 · 129 阅读 · 0 评论 -
【STL】deque
deque源码实现G2.9版本的deque源码deque对外呈现出的是一个双向数组,其示意图和代码如下:deque内部实际上是由一个个离散的内存段组成的,术语叫做buffer,这些buffer的头指针被保存在一个vector中,通过deque的迭代器的行为,就可以对外表现为一个连续的内存段(示意图中的map不是容器来的…不要搞混了)可以看出deque内部包含两个迭代器start和finish,分别指向头尾,除此之外还有一个map指向保存指向buffer的指针的内存段,以及一个表示map长度的原创 2021-01-25 17:41:42 · 132 阅读 · 0 评论 -
【STL】array(未完成)
array源码实现TR1版本的array源码array底层实现无法扩容的单向数组,其示意图和代码如下:没有构造和析构函数但要是用户申请的元素个数为0…vector则会默认提供1个元素的空间TR1版本的array源码注意右上角typedef对于数组的用法,这是理解array的成员_M_elems的类型的关键。forward_list源码实现...原创 2021-01-22 21:40:44 · 77 阅读 · 0 评论 -
【STL】vector
vector insertvector<int> vec{ 1,6,5,4,3,3,3,3,2 };auto it=vec.begin();while(it != vec.end()){ if(6 == *it){ vec.insert(it+1,4); } it++;}}传入指针it调用insert函数以后,it指向未知的空间,故再进行it++操作,会发生core dump,所以写成 it=vec.insert(it+1,4);vector 为什么没有pop_fro原创 2021-01-22 20:58:40 · 651 阅读 · 0 评论 -
【STL】容器总览(未完成)
总览未完成每个容器的用法 相同点与不同点原创 2021-01-21 21:35:53 · 65 阅读 · 0 评论 -
【STL】iterator迭代器
STL中的iterator是关联algorithms和containers的纽带,algorithms想要通过iterator处理元素,即需要调用containers中的_constainer_iterator变量,但是_constainer_iterator变量却无法完整应答algorithm所需要的信息,例如_containers_iterator中的T为class类型或者non-class类型(例int),两种类型所提供的iterator_category以及其他信息各有千秋不能一概而论所以这时就原创 2021-01-22 17:56:15 · 63 阅读 · 0 评论 -
【STL】list
list为何不能使用::sort()进行排序template <class RandomAccessIterator>inline void sort(RandomAccessIterator first, RandomAccessIterator last){ if(first != last){ __introsort_loop(first, last, value_type(first), __lg(last - first) * 2); __f原创 2021-01-22 17:17:13 · 152 阅读 · 0 评论 -
【STL】内存管理(未完成)
分配器malloc,free,new,delete申请内存操作要落在malloc()这个函数上,然后malloc()再去调用相应操作系统的API。释放内存操作要落在free()这个函数上,然后free()再去调用相应操作系统的API。malloc()申请的内存块类似上面这个样子(以VC6为例),可以看出有很多额外开销,尤其是内存块上面和下面的cookies,如果申请很多相同大小的内存块,就会有很多的cookies是多余的,造成了空间上的浪费。 ::operat原创 2021-01-21 20:12:01 · 64 阅读 · 0 评论 -
【STL】C++ STL 体系结构与内核分析源代码--侯捷
// author : Hou Jie (侯捷)// date : 2015/10/28 // compiler : DevC++ 5.11 (MinGW with GNU 4.9.9.2)//// 說明:這是侯捷 E-learning video "C++標準庫" 的實例程式.// 該課程的所有測試都出現在此.// 每一個小測試單元都被放進一個 namespace 中, // 如此保持各單元間最大的獨立性.// 每個 namespace 上方皆有該單元相應的 #include <..转载 2021-01-21 11:30:33 · 264 阅读 · 0 评论 -
【STL】STL概论
C++标准库 and C++标准模板库C++标准库包含了C++标准模板库参考网站:cplusplus:http://www.cplusplus.com/cppreference: http://en.cppreference.com/w/gcc:http://gcc.gnu.org/C++标准模板库在C++标准中,STL(Standard Template Library)由6大部件构成:容器(Container),分配器(Allocator),算法(Algorithm),迭代器(Itera原创 2021-01-21 11:25:30 · 91 阅读 · 0 评论