STL线性表Vector 的特点
Vector 像一个快速的数组,其具有数组的快速索引方式。还具有动态地进行扩展。
Vector 的特点
1. 索引和迭代器非常快,这个是结合了数组的特点,其低层就是一个指针动态分配的数组。
2. 当数组容量不够时,它的操作是这样的。
⑴.分配一个更大的连续存储区
⑵.将旧内存中的东西拷贝到新内存中去。
⑶.销毁旧内存中的对象
⑷.释放旧内存。
那么对于复杂的对象就一个问题了,在进行上述“扩容”的过程中,就会带来很多构造函数,复制构造函数和析构函数的调用。所以就很浪费时间,所以有时候,我们会vetor保存它的指针,而不是对象。
3. 插入和删除
如果只在vector的后端插入元素,那么这个动作时很快的。但是我们要在中间插入一些元素,那么他的花费就是相当昂贵的,因为它就会像数组那样,挨个向后移动。对于复杂对象,会调用有些operator= 。当容量不够时也会扩容。
所以综上,用vector的绝佳条件是。
1. 开始时就知道元素的正确数量。(防止多次扩容带来的影响)
2. 对数据的索引和随即访问频繁(刚好利用了数组的特点)
3. 插入和删除大多数在表的尾端。(在中间的话会引起数组移动)
补充:对过于复杂的自定义对象,我们建议在vector里面存储它的指针。