STL容器共性

STL容器所提供的都是值寓意,而非引用寓意,也就是说当我们向容器插入元素的时候,容器内部实施了拷贝动作,将我们要插入的元素再另行拷贝一份放入到容器中,也就是说我们提供的元素必须能够拷贝。

若有指针,需要写拷贝构造,重载等号

  • 除了queue和stack之外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。
  • 通常STL不会抛出异常,需要使用者传入正确参数。
  • 每个容器都提供了一个默认的构造函数和默认的拷贝构造函数。
  • 大小相关的构造方法:
    • size()返回容器中元素的个数
    • empty()判断元素是否为空

STL容器使用时机

vector deque list set multiset map multimap
典型内存结构 单端数组 双端数组 双向链表 二叉树 二叉树 二叉树 二叉树
可随机存取 对key而言,是
元素搜寻速度 非常慢 对key而言,快 对key而言,快
元素安插移除 尾端 头尾两端 任何位置 - - - -

使用场景

vector

软件历史操作数据的存储,经常查看历史记录,但不会删除记录。

deque

排队购票系统,排队者的存储可以采用deque,支持头部快速移除,尾端快速添加。如果采用vector,头部移除会移动大量数据,速度慢。

vector v.s. deque

  • vector.at()deque.at()效率高:vector.at(0)是固定的,deque的开始位置是不固定的
  • 如果有大量释放操作时,vector花的时间更少
  • deque支持头部的快速插入与移除

list

公交车乘客的存储,随时可能有乘客下车,支持频繁的不确定位置元素的移除和插入

set

对手机游戏的个人得分纪录的存储,存储要求从高分到低分的顺序排列

map

按ID号存储十万个用户,想要快速通过ID查找对应的用户。利用二叉树的查找效率。