• STL源码剖析--序列式容器心得笔记


    序列式容器

    序列式容器包括array(c++内建),vector,heap,priority_queue,list,slist,deque,stack,queue.

    其中stack和queue只是将deque简单的封装一下,技术上被称为配接器.

    vector

    我理解的vector是一个单口的水杯,杯的深度代表vector的容量capacity,而水的深度代表vector的大小size.

    正因为他是单口的所以在末尾添加push_back()和删除pop_back()都是常量级的操作.如果水杯满了,则申请一个两倍深度的水杯,将原水杯里的水倒入(当然这里描述的不好,应该是拷贝).

    vectors 包含着一系列连续存储的元素,其行为和数组类似。访问vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在vector中插入元素则是线性时间复杂度。

    push_back()

    当我们将新元素插入于vector尾端时,该函数会首先检查是否还有备用空间,如果有就直接在备用空间上构造函数,并调整迭代器finish,使vector变大.如果没有则扩充空间,如果原大小不是0,则默认扩大两倍.

    其配置完空间会将原vector拷贝过来并且释放原vector空间.调整迭代器指向新vector.

    resize 与reserve的区别

      reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。
      resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。再者,两个函数的形式是有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构造函数。

    list

    相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间.

    list是一个带头节点的环状双向链表.

  • 相关阅读:
    zabbix(x)
    kvm 学习(三)存储池
    kvm 学习(二)镜像
    hadoop3.1.1:找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
    (转)mysql更改数据目录
    (转)SLOW READPROCESSOR;ERROR SLOW BLOCKRECEIVER错误日志分析
    Linux下 为什么有时候使用sudo也提示没有权限
    (转)hadoop 常规错误问题(一)
    (转)SmartPing:一个服务器Ping值监测工具
    (转)hadoop 配置文件解释
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/14172182.html
Copyright © 2020-2023  润新知