• C++ 浅析 STL 中的 list 容器


    list - 擅长插入删除的链表
    链表对于数组来说就是相反的存在。


    数组本身是没有动态增长能力的(程序中也必须又一次开辟内存来实现),
    而链表强悍的就是动态增长和删除的能力
    但对于数组强悍的随机訪问能力来说的话,链表却非常弱。


    list - 是一个双向链表的实现。
    为了提供双向遍历的能力,list要比一般的数据单元多出两个指向前后的指针。


    这也是没办法的,毕竟如今的PC内存结构就是一个大数组,链表要在不同的环境中实现自己的功能就须要花很多其它空间。


    list提供了push_back,push_front,pop_back,pop_front四个方法来方便操作list的两端数据的添加和删除,只是少了vector的at和[]运算符的随机訪问数据的方法随机訪问数据的方法

    并非不能实现。而是list的设计者并不想让list去做那些事情。由于他们会做得很差劲。对于list来说。清除容器内全部的元素是一件苦力活,由于全部数据单元的内存都不连续,list仅仅有一个一个遍历来删除。


    相关博文

    详见:C++ stack queue vector 中 易混淆的经常用法 浅析

    详址:http://blog.csdn.net/u013630349/article/details/46860117


    Level 1 - 只作为Map使用:採用静态数组
    Level 2 - 保存定长数据,使用时也是所有遍历:採用动态数组(长度一開始就固定的话静态数组也行)
    Level 3 - 保存不定长数组。须要动态添加的能力。側重于寻找数据的速度:採用vector
    Level 3 - 保存不定长数组,须要动态添加的能力。側重于添加删除数据的速度:採用list
    Level 4 - 对数据有复杂操作。即须要前后增删数据的能力,又要良好的数据訪问速度:採用deque
    Level 5 - 对数据中间的增删操作比較多:採用list。建议在排序的基础上,批量进行增删能够对执行效率提供最大的保证
    Level 6 - 上述中找不到适合的:组合STL容器或者自己建立特殊的数据结构来实现

    有黑必有白,世界万物都是成对出现的。

    性能总结与使用建议

  • 相关阅读:
    android Intent的常用flags
    android 判断当前界面是否是桌面
    "****" is not translated in zh, zh_CN.的解决方法
    sqlite实现oracle的rownum功能
    android 滚动的缓冲图片
    Java 泛型通配符详解
    SpringBoot(审计) 统计接口调用次数及成功率
    flume自定义反序列化器deserializer
    flume自定义拦截器实现添加IP
    SpringMVC的简单应用
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6905685.html
Copyright © 2020-2023  润新知