C++ STL学习之 vector
容器分为序列式容器和关联式容器,序列式容器主要包括vector、list、deque、stack、queue、heap、priority_queue和slist等;关联式容器主要是基于红黑树实现,主要包括set、map、hashtable、hash_set、hash_map等。本文主要梳理vector的相关知识点。
vector实现思想:
1.扩充空间包括的操作:(1)申请新空间(2)数据移动(3)释放旧空间,这个过程十分耗时,而vector的关键就是如何处理自动扩充空间,从而提升效率。
2.连续线性空间、动态分配空间、随机存取,所以vector提供的是random access Iterators
3.运用start、finish和end_of_storage三个迭代器,就可以实现首尾标示、大小、容量、空容器判断、[]运算、最前端元素、最后段元素等功能。
vector关键技术
1.vector的构造与内存管理
关注点:构造的方式、元素的添加、大小和容量的变化
(1)元素添加与构造方式:将新元素插入vector尾端时,首先检查是否还有备用空间,如果有就直接在备用空间上构造元素;如果没有,就扩充空间。
(2)2倍扩容技术
在添加元素时,如果没有足够的备用空间,那么vector会使用2倍扩容技术,为新的元素申请新的存储空间(如果原大小为0,则申请1个空间)。注意,动态增加大小,并不是在原有空间之后连接新空间,因为无法保证源空间之后还有可供配置的空间,而是以原来大小的两倍重新配置一块较大空间,然后将原内容拷贝过来,然后在原内容之后构造新元素,并释放原空间。(申请新空间+拷贝原数据+释放原空间)
vector插入元素实现(3种情况)