• 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在预先分配大容量时候效率低

  • 相关阅读:
    跟我学算法-图像识别之图像分类(上)(基础神经网络, 卷积神经网络(CNN), AlexNet,NIN, VGG)
    跟我学算法-人脸识别(Siamese network) 推导
    EL 表达式
    JavaBean 介绍
    HttpSession 入门
    Cookie 入门
    JSP 入门
    Web 编程中路径问题
    Web 编程中编码问题
    Response 和 Request
  • 原文地址:https://www.cnblogs.com/hui277/p/3528752.html
Copyright © 2020-2023  润新知