C++/STL0.容器概述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++/STL0.容器概述相关的知识,希望对你有一定的参考价值。


文章目录

  • ​​一、容器分类​​
  • ​​(1)序列性容器​​
  • ​​(2)关联式容器​​
  • ​​(3)容器适配器​​
  • ​​二、容器共性​​
  • ​​三、容器比较​​

一、容器分类

(1)序列性容器

  • ​序列式容器​​:按线性排列来存储某类型值的集合,每个元素都有自己特定的位置。顺序容器主要有vector、deque、list
  1. ​vector​​:
  1. 本质是动态数组。它是在堆中分配内存,元素连续存放
  2. 有保留内存,清除元素后内存也不会释放。当请求空间超出现有空间时,会申请等同于当前自身空间大小的新空间
  3. 支持随机访问和任意位置插入删除。
  4. 因为vector是连续存放的,在尾部增删元素速度最快,否则就要进行数据的移动,速度会慢很多。如果vector的元素是结构或类,移动时也会进行构造和析构操作
  1. ​deque​​:
  1. 本质是分段数组+一个数组首地址索引数组。参考:​​deque的实现原理​​
  2. 在容器任意位置的操作需要线性时间。随机访问速度比vector慢,但在随机位置增删数据比vector快
  3. 支持随机访问和任意位置插入删除。
  4. 和vector不同,deque支持高效地从起始和结尾端增删数据,这两个位置的操作不会引起其他数据移动
  1. ​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不能重复


以上是关于C++/STL0.容器概述的主要内容,如果未能解决你的问题,请参考以下文章

(C++基础_STL) —— 初识STL

(C++基础_STL) —— 初识STL

STL容器共性机制和使用场景

JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

JAVA-初步认识-常用对象API(集合框架-体系共性功能)

GIS+=地理信息+容器技术——容器技术概述