数据结构与算法分析之c++STL的vector特点分析

STL线性表Vector 的特点

Vector 像一个快速的数组,其具有数组的快速索引方式。还具有动态地进行扩展。

Vector 的特点

1.      索引和迭代器非常快,这个是结合了数组的特点,其低层就是一个指针动态分配的数组。

2.      当数组容量不够时,它的操作是这样的。

⑴.分配一个更大的连续存储区

⑵.将旧内存中的东西拷贝到新内存中去。

⑶.销毁旧内存中的对象

⑷.释放旧内存。

那么对于复杂的对象就一个问题了,在进行上述“扩容”的过程中,就会带来很多构造函数,复制构造函数和析构函数的调用。所以就很浪费时间,所以有时候,我们会vetor保存它的指针,而不是对象。

3.      插入和删除

如果只在vector的后端插入元素,那么这个动作时很快的。但是我们要在中间插入一些元素,那么他的花费就是相当昂贵的,因为它就会像数组那样,挨个向后移动。对于复杂对象,会调用有些operator= 。当容量不够时也会扩容。

 

所以综上,用vector的绝佳条件是。

1.      开始时就知道元素的正确数量。(防止多次扩容带来的影响)

2.      对数据的索引和随即访问频繁(刚好利用了数组的特点)

3.      插入和删除大多数在表的尾端。(在中间的话会引起数组移动)

补充:对过于复杂的自定义对象,我们建议在vector里面存储它的指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值