STL中提供了一个非常好用的动态数组模板vector,vector一般有下面的集中函数
begin():返回指向容器中第一个元素的迭代器。
end():返回指向容器中最后一个元素后面的位置的迭代器。
rbegin():返回指向容器中最后一个元素的反向迭代器。
rend():返回指向容器中第一个元素前面的位置的反向迭代器。
erase(...):从容器中删除!
clear():从容器中删除所有元素。
front():返回容器中第一个元素的引用。
back():返回容器中最后一个元素的引用。
push_back():在容器末尾增加新元素。
pop_back():删除容器末尾的元素。
insert(...):插入一个或多个元素。
vector 可以想数组一样直接进行地质访问,也可以用迭代器进行迭代访问。主要的原因是vector的内部的内存是连续的,不像list一样是个链表无法做到随机访问。同时vector的内存大小可以动态的扩充。原理是每次使用vector声明一个对象的时候,会自动申请一定的连续的空间。当空间用完的时候,会自动的进行两倍或者是略微小于2倍的扩充,(小于2的原因是,每次新申请的空间可以利用之前释放的空间,当大于等于2的时候是做不到的。可以通过等比公式计算)。新申请的空间后,会将数据完整的复制拷贝过来。
和vector比较类似的是deque双向的队列,也是连续的内存,同时支持头部和尾部的双向插入和存储。实现的原理是类似的。
vector的定义可以如下: