C++STL选择合适的容器以及容器操作的时间复杂度

C++ STL对每一个开发者起着至关重要的作用,每一种容器封装好了相应的数据结构,从而保证我们在使用容器的时候安全稳定高效,不过如何在特定的场景选择合适的容器,我们还是需要注意很多细节的,more effective stl这本书详细描述了STL的注意事项,从中总结部分如下:
大量添加新元素的时候不要使用vector 因为vecter内部的实现方式是利用new2倍的原有内存空间然后再拷贝,影响效率,这个时候可以选择list。
关联容器比如map 查找时候时间复杂度为logn 因为其内部实现方式采用的是红黑树。
二分查找时间复杂度为logn 数组非有序时间复杂度则为n采用遍历方式。
如果频繁出现插入删除操作时尽量避免使用vector和deque 因为其内部是内存连续,插入或者删除都同一块内存其他数据都需要整体的移位。
遍历顺序容器的时候和插入的顺序是一致的,而关联内容则可能会不一定,关联容器可能会内部自动处理变成有序形式。
Vector的数据模型就是数组,这点与C完全兼容、高效随机访问、节省空间。但是缺点是内部插入删除元素代价巨大、动态大小查过自身容量需要申请大量内存做大量拷贝。
List 的数据结构模型是链表,任意位置插入删除元素常量时间复杂度、两个容器融合是常量时间复杂度 On,但是不支持随机访问、比vector占用更多的存储空间。
Deque的数据模型是数组和链表的折衷,高效随机访问、内部插入删除元素效率方便、两端push pop,同样内存占用率比较高。
Map、set、multimap、multiset的数据结构模型是二叉树(红黑树),元素会按照键值排序、查找是对数时间复杂度、通过键值查元素、map提供了下标访问 logn。
如果需要随机访问,用vector,如果存储元素的数目已知,用vector,需要任意位置随机插入删除,用list,只有需要更多在容器的首部尾部插入删除元素,用deque,元素是复杂结构用list,也可以用vector存储指针(需要额外的精力去维护内存),看需求。,如果操作是基于键值,用set map,如果需要经常的搜索,用map set,同样我们如果最小效率速度,可以利用hash_map,相对于以空间换时间,时间复杂度为O1。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值