20 容器vector的深度探索
1、概述
这篇主要介绍G2.9中STL容器vector的设计结构。vector是连续的空间结构,并可以向容器尾部增加元素。
2、vector的设计结构
解析:
a、vector设计的时候,有3个元素:start、finish和end_of_storage。其中start是元素首迭代器,finish是元素尾迭代器,end_of_storage是容器的尾迭代器。
b、向vector中增加元素,如果元素超过vector此时的容量,则vector的分配器会在内存中另外找个地方,将容器扩展为原来的2倍,然后将元素复制过去。
3、vector的类结构
解析:
a、可以看出三个元素start、finish、end_of_storage的设计时iterator结构,而此时iterator就是指针;
b、vecto有一些通用的函数,如通过begin()函数,返回start,即首迭代器,能取出首元素等等。
c、当向vector中增加元素时,使用puch_back()函数,如下:
①判断容器是否已满,如果没有则实现insert_aux()函数:
②insert_aux()函数再次检查容器是否已满(因为有可能该函数被别的函数用到):
③当容器空间已经满后,就会扩展容器,如下:
解析:
a、首先判断该容器的大小是否为0,若为0,则容器1个元素的空间。若不是,则扩展容器为原理的2倍;
b、再使用分配器分配此时的内存;
c、然后将原理的元素拷贝到新的内存空间中。拷贝的方式分为两步,第一步是将首元素与该插入元素的数据进行拷贝,第二步是将该插入元素的后面元素进行拷贝。