STL学习(四)

133 阅读1分钟

一边看侯捷老师(STL源码分析)课程,一边记录下来,仅是给自己当笔记看的。

1.vector深度探索

总结:所有环境下都是两倍增长,目前是3个指针,所以内存为12字节。

2倍增长:

因为这种特性,所以每次成长都会大量调用拷贝构造及析构函数,会很大损耗。

2.vector 的 iterctor

3.容器array

当容器内存是连续空间时,迭代器就可以用一个指针表示,而不需要是一个类。类如array,array没有构造,析构函数。

4.单向链表

5.容器deque 双队列

双向开口 :分段连续 内部是vector,所以它也是2倍增长,但它拷贝到新的空间是,是拷贝到中间,以保证两边都有可用的缓冲区间,里面时指针,每个指针指向连续的空间buffer

内存:16+16+4+4 = 40
每个迭代器都有四个指针,来标志位置,以实现连续
聪明的insert(),插入时会去寻找那边距离端点的位置进,再进行移位,才开始插入数据。

6.deque内部如何实现连续空间

通过++ += 指针跳跃来表示,如果超过本缓冲区,就进行判断,到下一个节点,-=少是因为可以使用+=。 总结:

7.queue 和 stack