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容器或者自己建立特殊的数据结构来实现

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

性能总结与使用建议

C++ 浅析 STL 中的 list 容器的更多相关文章

  1. STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  2. 【转】 STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  3. STL中的set容器的一点总结(转)

    STL中的set容器的一点总结 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂 ...

  4. C++ STL中的常用容器浅谈

    STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...

  5. stl中顺序性容器,关联容器两者粗略解释

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...

  6. 深入解析C++ STL中的常用容器

    转载:http://blog.csdn.net/u013443618/article/details/49964299 这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中的 ...

  7. STL中的set容器的一点总结2

    http://blog.csdn.net/sunshinewave/article/details/8068326 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像 ...

  8. 【转】STL中的set容器的一点总结

    转自 http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636375.html 1.关于set C++ STL 之所以得到广泛的赞誉,也 ...

  9. 使用STL中的list容器实现单链表的操作

    #include<iostream> #include<list> #include<algorithm> using namespace std; void Pr ...

随机推荐

  1. hdoj--1083--Courses(最大匹配)

    Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  2. mfs使用指引

    客户端工具集 mfsgetgoal #设定副本数 mfssetgoal #获取副本数 mfscopygoal # mfsgetsclass mfssetsclass mfscopysclass mfs ...

  3. ES6 Proxy 性能之我见

    ES6 Proxy 性能之我见 本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performance Proxy是ES6的一个强力 ...

  4. IO编程 - 转载自廖雪峰的博文

    IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...

  5. QlikSense系列(4)——QlikSense管理

    QlikSense管理主要通过QMC界面,在安装成功后,首先需要导入用户,QlikSense本身不能创建和验证用户,只能借助第三方系统, 笔者只使用过Windows账户和AD域用户: 1.Window ...

  6. winFrom线程

    方法--->委托--->BeginInvoke用指定的参数异步执行委托 委托就是我想做什么,而你可以作什么,我就让你去做.

  7. ZBrush中如何将一个模型应用在不同的图层

    我们经常会使用ZBrush®中的插入笔刷来实现快速建模,或者使用Insert笔刷创建人物四肢,那么在使用这些笔刷时,它默认是和所接触模型同在一个Subtool,如果您需要不同的材质或者雕刻手法,那么就 ...

  8. 脚本_部署LNMP平台

    #!bin/bash#功能:部署LNMP平台,实际运行脚本时,需要去除备注.#作者:liusingbonfunction menu {                //定义函数menu        ...

  9. 上传图片到PHP服务器

    test_picture = function() { api.getPicture({ sourceType: 'library', encodingType: 'png', mediaValue: ...

  10. Java常用工具类---XML工具类、数据验证工具类

    package com.jarvis.base.util; import java.io.File;import java.io.FileWriter;import java.io.IOExcepti ...