首页 > 编程语言 >【C++/STL】0.容器概述

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

时间:2022-11-22 10:38:54浏览次数:47  
标签:容器 迭代 STL 元素 C++ vector 概述 随机 指针


文章目录

  • ​​一、容器分类​​
  • ​​(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不能重复


标签:容器,迭代,STL,元素,C++,vector,概述,随机,指针
From: https://blog.51cto.com/u_15887260/5876696

相关文章

  • 【C++/STL】2. vector向量
    vector与常用的数组类似,占用连续内存空间,对随机存取支持很好。可以类似数组用下标访问,也可以类似字符串用​​vector.at()​​成员函数访问vector是尾部开口设计,类似栈。从......
  • C/C++中拆分long/float/double等数据并重新组合的方法
    在嵌入式编程时,常常会遇到需要做数据通信的场景。单片机往往只支持一次8位的数据传递,为了传输较长的数据类型,只能先在主机将数据拆分,再在从机重新组合,这里介绍一些实用的数......
  • 【C++】使用boost库的split函数分割字符串
    1#include<iostream>2#include<vector>3#include<boost/algorithm/string.hpp>45intmain(constintargc,constchar*argv[])6{7std::vect......
  • C++快速幂
    C++快速幂快速幂的作用:当我们做一些高次幂的计算时,就不能直接进行暴力的计算。例如:需要计算2^n并且n≤10^18。这时候如果我们直接进行暴力的计算,时间复杂度为O(n),那......
  • css基础概述和重点
     CSS层叠样式表css用来表现HTML一个应用或XML等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS能够对网......
  • MySql复习-数据库的概述
    第01章_数据库概述讲师:尚硅谷-宋红康(江湖人称:康师傅)官网:http://www.atguigu.com1.为什么要使用数据库持久化(persistence):-存到可掉电式存储设备中以供之后使用......
  • 继承的概述
    封装继承爸爸有的东西,儿子都可以去用extends继承需要学习的点如何自己设计什么时候用继承小结......
  • [C++学习笔记-IO控制_2]:控制台IO-cin 输入
    目录控制台I/O:cin输入1.重载的>>运算符2.cin的特点3.其他输入方法3.1单字符输入:get()3.2字符串输入:get()/getline()3.3其他的输入函数控制台I/O:cin输......
  • C/C++数据结构题目(2022)
    C/C++数据结构题目(2022)1、菜鸟智慧系统(线性表)[问题描述]使用双向链表模拟快递驿站的系统运作:假设快递驿站的货架分小、中、大3种类型,容量分别为500、100、50个包裹;......
  • C/C++员工通讯录(链表实现)
    C/C++员工通讯录(链表实现)一、设计一个员工通讯录(如编号、身份证号码、姓名等),用单链表实现员工通讯录的存储和增删改查等操作。通讯录链表的建立;通讯者信息的插入;通讯......