STL使用中注意的细节

1、list、deque和vector的区别:

          a、vector 模塑出来一个动态数组,在末端添加和删除元素时,性能相当好,在前端或中部插入或删除元素时,性能不怎么样。

          vector 性能优异的原因是,就是分配了比其所容纳元素所需的,更多的内存空间。

  1. //仅分配空间,size 是不变的   
  2. v.reserve();  
  3.   
  4. //下面两种方式是一样的。不过第一种方法只分配空间,而第二种方法还要调用构造函数   
  5. vector<int> v;  
  6. v.reserve(80);  
  7.   
  8. vector<int> v(80); //如果构造函数很耗时,那么推荐使用上面的方法  

元素存取

   

deque也采用动态数组来管理元素,提供随机存取,与vector非常相似。不同的是deque的动态数组头尾都开放,因此能在头尾两端进行快速安插和删除。

迭代器无效

1. vector 插入或删除操作会使“作用点”之后的各元素的pointers, references和iterators失效,如果插入操作引发内存重新分配,那么容器上所有的pointers, references和iterators都将失效

2. deque 插入或删除都可能引起内存重新分配,所以任何插入或删除动作都会使所有指向 deque元素的 pointers, references 和 iterators 失效。

 

 List 与 vector或deque的区别

1.List 不支持随机存取。如果你要存取第5个元素,就必须从头开始数。

2.任何位置插入和删除都很快。

3.插入和删除不会造成其它元素pointers, references 和 iterators 失效。

4.List 的迭代器是双向迭代器,所以凡是用到随机存取的迭代器的算法(特别是排序算法)都不能用,只能用list 提供的特殊版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值