【C++/STL】0.容器概述

一、容器分类

(1)序列性容器

  • 序列式容器按线性排列来存储某类型值的集合,每个元素都有自己特定的位置。顺序容器主要有vector、deque、list
    1. vector

      1. 本质是动态数组。它是在堆中分配内存,元素连续存放
      2. 有保留内存,清除元素后内存也不会释放。当请求空间超出现有空间时,会申请等同于当前自身空间大小的新空间
      3. 支持随机访问和任意位置插入删除。
      4. 因为vector是连续存放的,在尾部增删元素速度最快,否则就要进行数据的移动,速度会慢很多。如果vector的元素是结构或类,移动时也会进行构造和析构操作
    2. deque

      1. 本质是分段数组+一个数组首地址索引数组。参考:deque的实现原理
      2. 在容器任意位置的操作需要线性时间。随机访问速度比vector慢,但在随机位置增删数据比vector快
      3. 支持随机访问和任意位置插入删除。
      4. 和vector不同,deque支持高效地从起始和结尾端增删数据,这两个位置的操作不会引起其他数据移动
    3. list

      1. 本质是双向链表
      2. 是一种双线性列表,只能从前向后或从后向前顺序访问,不支持随机访问

(2)关联式容器

  • 关联式容器:与顺序容器相比,关联式容器更注重快速和高效地检索数据的能力。这类容器是根据键值(key)来检索数据的,键可以是值,也可是容器内的某一成员。这一类中的成员初始化后都是按一定顺序排列好的。主要有set、multiset、map和muitmap
    1. set:快速查找,不允许重复值
    2. multiset:快速查找,允许重复值
    3. map:一对一映射,基于关键字快速查找,不允许重复值
    4. multimap:一对多映射,基于关键字快速查找,允许重复值

(3)容器适配器

  • 容器适配器:对已有容器的进行某些特性的再封装,不是一个真正的新容器,主要有stack、queue
    1. stack:堆栈类,后进后出
    2. queue:队列类,先进先出

二、容器共性

  • 容器一般提供一下函数
名称说明
默认构造函数提供容器默认初始化的构造函数
复制构造函数将容器初始化为现有同类容器副本的狗杂函数
析构函数释放容器空间时进行内存整理的析构函数
empty容器中无元素返回true;否则返回false
max_size返回容器中可存储的最大元素数目
size返回容器中当前元素个数
=将一个容器赋给另一个容器
< / <= / > / >= / == / !=容器间比较
swap交换两个容器元素
  • 顺序容器和关联容器共有函数如下
名称说明
begin此函数有两个版本,返回第一个元素的 迭代器指针 和 常迭代器指针
end此函数有两个版本,返回最后一个元素后面一位的 迭代器指针 和 常迭代器指针
rbegin此函数有两个版本,返回最后一个元素的 迭代器指针 和 常迭代器指针
rend此函数有两个版本,返回第一个元素前一位的 迭代器指针 和 常迭代器指针
erase从容器中清除一个或几个元素
clear清除容器中所有元素

三、容器比较

  • vector:

    1. 连续空间存储
    2. 快速访问随机元素(可用[]);快速在末尾插入元素;在序列中随机增删元素比较慢
    3. 如果一开始分配的空间不够,有一个重新分配更大空间的过程
  • deque:

    1. 小片的连续,小片间用链表相连,实际上内部有一个map指针。
    2. 快速随机访问元素(因为知道类型,所以还是可以用[]取值,但速度没有vector快);快速在首尾两端增删元素;在序列中随机增删元素比较慢;空间分配快于vector,重新分配空间后原有元素不需要备份。
    3. 对deque的排序操作,可以先复制到vector,排序后再复制回来
  • list:

    1. 每个元素用链表相连
    2. 随机访问比vector慢;随机插入比vector快。对每个元素分配空间,所以不存在空间不足重新分配的情况
  • set:

    1. 内部元素唯一,用一颗平衡树结构来存储。
    2. 遍历的时候就排序了。查找也比较快
  • map:

    1. 一对一映射结合,key不能重复
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云端FFF

所有博文免费阅读,求打赏鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值