C++ STL 常用容器 学习笔记

一、vector

       1. vector相当于一个动态数组,支持随机存取。

       2. 如果在vector前端或者中部安插或删除元素,性能比较差,因为操作点之后的每一个元素都必须移动位置。

       3. 函数 capacity() ,它返回实际能够容纳的元素数量,如果超过这个数量,vector 有必要重新分配内存(一倍),然后将元素重新复制到vector里。

       4. 一旦内存重新配置,和vector元素相关的所有reference 、 pointer、iterators都会失效。  而且内存重新配置十分耗时间。

       5. 所以如果考虑速度和pointer等,则需要考虑容量问题。可以使用reverse(num)保留适当容量,避免内存重新分配。或者在初始化期间向构造器传递 参数,构造出足够的               空间。

       6. 只有at()函数检查下标是否合法,可能抛出异常。

       7. clear()实际上是循环调用erase(),删除元素不释放内存,只有在vector的析构函数才释放内存。



二、deque

       1.也采用动态数组来管理元素,提供随机存取,但是deque动态数组首尾都开放,因此能在两头进行快速安插和删除。

       2.迭代器需要在不同区块间跳转,所以必须是特殊的智能型指针。

       3.deque不必再内存重分配时复制所有元素、

       4.内存区块不再被使用时会被释放。

       5.deque不提供capacity()和reserve()操作。

       6.在除了首尾两端的其他地方插入和删除元素,都将会导致指向deque元素的任何pointers、references、iterators失效。不过,deque的内存重分配优于vector。因为其内部结构显示不需要复制所有元素。


三、Lists

         1.Lists使用一个双向链表来管理元素。

         2.Lists不支持随机存取。所以在lists中遍历任意元素,是个缓慢的行为。但在任何位置上安插和移除都非常快,无需移动其他元素。

         3.对于小对象,vector的效率比list更高。数据类型越大越复杂,vector效率比list越低。



四、Set和Multiset

     1.set和multiset会根据特定的排序准则,自动将元素排序。multiset允许元素重复,而set不允许。

     2.set和multiset通常以平衡二叉树(红黑树)完成。

     3.自动排序的主要优点使搜索元素时具有良好的性能。但造成一个重要的限制:你不能直接改变元素值,因为这样会打乱原本正确的顺序,因此,要改变元素         值,必须先删除旧元素,再增加新元素。

     4. 内存占用为包含每个数据元素的节点。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值