zoukankan      html  css  js  c++  java
  • C++ 顺序容器 vector list deque 之比较

    在C++标准库中定义了三种顺序容器类型:vector,list和deque。所谓顺序容器就是根据位置来存储和访问元素,元素的排列次序与元素的值无关,而是由元素添加到容器的次序决定的。

    vector的底层存放空间是像数组一样连续的空间,但vector容器是可以自增长的,当vector插入元素时,使其所需空间超过最初分配的空间时,vector就会再找一个更大的连续的空间存放之前的旧元素和新添加的元素,然后释放之前的空间。而如果是这样的增长机制,势必会影响vector插入新元素的性能。因为如果有连续的插入操作,则每一次都要进行申请空间,复制元素,释放空间的操作。幸运的是,在vector分配内存的机制是通常会分配比所需容量更大的空间,比如vector<int> ivec(10)可能在底层实现上会使ivec的实际可用空间大于10,以此来减少连续插入操作的性能变慢的问题。事实上这种解决方式的效果非常好。vector的capacity()成员函数返回的就是vector的实际内存分配空间,这个空间也可以通过成员函数reserve()设置。

    而list的存放结构则是类似于链表,是内存中不连续的空间。

      1. 搜索和访问元素操作比较

    vector和deque的用法十分像,简单的说这两种容器都可以向数组一样通过下标进行随机访问,而list则不能通过下表访问。list只能通过引用或迭代器访问元素

      2.插入和删除操作的比较

    vector 允许在容器末尾快速插入和删除元素,如果vector想从容器头部插入或删除元素,那么他的时间花销是相当大的。其实不只是在头部插入或删除元素,如果vector选择在除了尾部的任意位置进行插入或删除操作。

    deque 却允许在容器头部和容器末尾快速插入和删除元素。但在收尾之间进行插入删除操作也是花费很大的。

    而list却可以在很小的花销下,在容器的任何位置进行插入和删除操作。

    (未完待续)

  • 相关阅读:
    ie7不支持inline-block
    使padding的值不影响整体块的大小
    网页在不同屏幕下的自适应
    CSS:line-height:行高
    用css制作三角形,理解
    js之setTimeOut();
    jQuery:has()和jQuery:contains()区别
    前端开发之jQuary--可见筛选选择器
    python基础知识--10Lambda匿名函数、三元表达式及map、reduce、filter
    python基础知识--9迭代器生成器闭包与装饰器
  • 原文地址:https://www.cnblogs.com/jfcspring/p/3264839.html
Copyright © 2011-2022 走看看