
实为不智。因为所谓扩充控件(不论多大),是“配置新空间(malloc)/拷贝移动数据
(memcpy)/释放旧空间(free)”的大工程,时间成本很高,应该采用某种未雨绸缪的空
间配置策略。
注意,所谓动态增加大小,并不是在原空间之后接续新空间(因为无法保证之后尚有
可供配置的空间),而是每次再分配原大小两倍的内存空间。因此,对 vector 的任何操作,
一旦引起控件重新配置,指向原 vector 的所有迭代器就都失效了。
由于 vector 维护的是一个连续线性空间,因此 vector 迭代器具备普通指针的功能,
支持随机存取,即 vector 提供的是 Random Access Iterators。
2.向量类模板 std::vector 的成员函数
#include<vector>
std::vector<type> vec;
std::vector<type> vec(size);
std::vector<type> vec(size,value);
std::vector<type> vec(myvector);
std::vector<type> vec(first,last);
Operators:==、!=、<=、>=、<、>、[]
assign(first,last):用迭代器 first,last 所指定的元素取代向量元素
assign(num,val):用 val 的 num 份副本取代向量元素
at(n):等价于[]运算符,返回向量中位置 n 的元素,因其有越界检查,故比[]索引访问安
全
front():返回向量中第一个元素的引用
back():返回向量中最后一个元素的引用
begin():返回向量中第一个元素的迭代器
end():返回向量中最后一个元素的下一个迭代器(仅作结束游标,不可解引用)
max_size():返回向量类型的最大容量(2^30-1=0x3FFFFFFF)
capacity():返回向量当前开辟的空间大小(<= max_size,与向量的动态内存分配策略相
关)
size():返回向量中现有元素的个数(<=capacity)
clear():删除向量中所有元素
empty():如果向量为空,返回真
erase(start,end):删除迭代器 start end 所指定范围内的元素
erase(i):删除迭代器 i 所指向的元素
erase()返回指向删除的最后一个元素的下一位置的迭代器
insert(i,x);把 x 插入到迭代器 i 所指定的位置之前
insert(i,n,x):把 x 的 n 份副本插入到迭代器 i 所指定的位置之前
insert(i,start,end):把迭代器 start 和 end 所指定的范围内的值插入到迭代器 i 所指
定的位置之前
push_back(x):把 x 推入(插入)到向量的尾部
pop_back():弹出(删除)向量最后一个元素
rbegin():返回一个反向迭代器,该迭代器指向的元素越过了向量中的最后一个元素
rend():返回一个反向迭代器,该迭代器指向向量中第一个元素