zoukankan      html  css  js  c++  java
  • STL 容器效率的对比

    STL常用的三种序列容器vector、list、deque

    1、vector

    内部以数组的形式实现,可高效的随机访问每个元素,高效的在末尾添加元素,容量动态增加,中间添加或者删除元素效率低,

    vector的迭代器在内存重新分配时将失效(它所指向的元素在该操作的前后不再相同)。当把超过capacity()-size()个元素插入vector中时,内存会重新分配,所有的迭代器都将失效;否则,指向当前元素以后的任何元素的迭代器

    将失效。当删除元素时,指向被删除元素以后的任何元素的迭代器都将失效。

    2、list

    内部以链表的形式实现,不能随机访问,在任何地方高效的插入、删除,

    增加任何元素都不会使迭代器失效。删除元素时,除了指向当前被删除元素的迭代器外,其它迭代器都不会失效

    3、deque

    内部以数组方式实现,可随机访问每个元素,高效的在开头和结尾添加、删除元素,在中间添加、删除元素效率低,

    增加任何元素都将使deque的迭代器失效。在deque的中间删除元素将使迭代器失效。在deque的头或尾删除元素时,只有指向该元素的迭代器失效。

    注:如果没有特别的理由让你使用list或者deque,那就使用vector

    下面是三种容器添加1000000个整数所消耗的时间对比,可以知道

    • vector在预先分配好空间使用随机访问方式效率明显高,而使用push_back添加元素预先分不分配容量基本无影响
    • list使用push_back和push_front所消耗的时间差不多,预先分配空间比未预先分配空间耗时多,这是因为分配空间消耗了大量时间
    • deque随机访问方式效率反而低,而不预先分配容量耗时更少

    说明vector预先分配空间效率高,list和deque在预先分配大容量时候效率低

  • 相关阅读:
    登录权限
    ajax搜索分页
    dos命令
    tp5单删
    MVC简易封装
    linux环境安装swoole
    nginx环境安装laravel404问题
    ABZ职业规划
    Yii安装curl
    SKU的概念和理解
  • 原文地址:https://www.cnblogs.com/hui277/p/3528752.html
Copyright © 2011-2022 走看看