STL源码剖析——vector

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()             返回指向容器最后一个元素的迭代器


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值