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、然后将原理的元素拷贝到新的内存空间中。拷贝的方式分为两步,第一步是将首元素与该插入元素的数据进行拷贝,第二步是将该插入元素的后面元素进行拷贝。