vector是一种动态增长的数组。
vector 遍历
GNU 2.9
一个vector中所含的数据为三根指针 start, finish, end_of_storage
所以sizeof()一个vector值为12
。(一个指针占4位)
满足前闭后开区间原则,start指向第一个元素,finish指向最后一个元素的下一位。
空间二倍增长
:发生在添加元素时当finish==end_of_storage,利用辅助插入函数insert_aux()函数实现
insert_aux()步骤:
1.检查finish是否等于end_of_storage
2.如果size不为0,申请一个2*size的空间。
3.将原vector中在插入元素之前的元素拷贝到新vector中。
4.将新的元素插入在新的vector内。
5.将原vector中在新插入元素之后的元素拷贝带vector中。
注意:在push_back()中第1步和第5部是多余的。push_back()在调用insert_aux()之前已经检查过步骤1,push_back()在最后插元素不需要步骤5。insert_aux()之所以这样设计是因为除了push_back()函数意外insert()函数也会调用insert_aux(),需要步骤1和5。
vector迭代器:
GNU2.9 中直接将迭代器定义为元素类型的指针。
算法如果需要获取迭代器的特征(trait)使用萃取机( iterator_traits)
vector::iterator it=v.begin();
iterator_traits::iterator_category
iterator_traits::difference_type
iterator_traits::value_type
GNU4.9中迭代器被设计为一种复杂的class。