STL源码剖析——vector

时间:2021-11-08 04:22:37

Vector与array非常相似,两者的唯一差别在于空间的运用的灵活性。Array是静态空间,一旦配置了就不能改变。Vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。

 

Vector的数据结构

Vector所采用的数据结构非常简单:线性连续空间。它以两个迭代器start和finish分别指向配置得来的连续空间中目前已使用的范围,并以迭代器end_of_storage指向整块连续空间的尾端。

Template<class T, class Alloc =alloc>

Class vector {

Protected:

          Iteratorstart;

          Iteratorfinish;

          Iteratorend_of_storage;

}

 

Vector内存管理

Vector可以动态增加大小,然而它并不是在原空间之后接连续新空间,而是以原大小的两倍另外配置一块较大空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。

 

Vector基本操作

clear()         移除容器中所有数据。

 

empty()         判断容器是否为空。

 

erase(pos)        删除pos位置的数据

 

erase(beg,end)   删除[beg,end)区间的数据

 

front()         传回第一个数据。

 

insert(pos,elem)  在pos位置插入一个elem拷贝

 

pop_back()     删除最后一个数据。

 

push_back(elem) 在尾部加入一个数据。

 

resize(num)     重新设置该容器的大小

 

size()         回容器中实际数据的个数。

 

begin()           返回指向容器第一个元素的迭代器

 

end()             返回指向容器最后一个元素的迭代器