C++ STL模板库知识

容器实现数据结构,迭代器类似指针将容器的元素与算法关联

头文件

#include<iterator>  //迭代器
#include<iostream> //标准输入输出流
#include<fstream> //文件输入输出流
#include<sstream> //字符串输入输出流
#include<string> //字符串
#include<functional> //函数对象
#include<vector> //向量  动态数组
#include<deque> //双端队列
#include<queue> //队列、优先队列
#include<list>  //链表
#include<stack> //堆栈
#include<set> //集合、多集合、位集合
#include<map> //映射、多映射
#include<algorithm> //通用算法
#include<numeric>  //数值算法

模板:函数模板和类模板

STL思想:

  1. 形成容器元素
  2. 取出迭代指针
  3. 调用通用算法

算法通过迭代器存取容器内容
迭代器类型:输入、输出、前向、双向、随机访问迭代器

顺序性容器:

名字叙述
vector从后面快速的插入与删除,直接访问任何元素
deque从前面或后面快速的插入与删除,直接访问任何元素
list双链表,从任何地方快速插入与删除

关联容器:

名字叙述
set快速查找,不允许重复值
multiset快速查找,允许重复值
map一对多映射,基于关键字快速查找,不允许重复值
multimap一对多映射,基于关键字快速查找,允许重复值

容器适配器:

名字叙述
stack后进先出
queue先进先出
priority_queue最高优先级元素总是第一个出列

并联、关联容器有下列函数:

名字叙述
begin()返回容器第一个元素迭代器指针
end()最后一个元素后面一位
Rbegin()最后一个元素
Rend()首个元素前面一位
Erase()清除几个元素
Clear()清除所有元素
  • vector容器是动态数组,在堆中分配内存,元素连续存放,有保留内存。若减少大小后内存也不会释放,当元素个数大于当前容量时,会分配原来2倍容量,从而将元素复制到新空间,原空间释放。可以快速随机访问元素,快速在末尾插入删除元素,此过程中不用移动内存;对中间元素插入删除时要移动内存。若元素是结构体类型或类,移动内存时还要进行构造和析构操作。vector可以使用[]操作符。
  • deque是双端队列,可以快速地随机访问元素,快速地在开始和末尾插入删除元素。随机插入比两端插入要慢,重新分配内存比vector要快。重新分配空间后,原空间保持,只是新建立了一个内存块,将新数据插入这个内存块,没有空间的复制删除过程,故deque是由多个分段连续的内存空间组成。因此,deque在某一位置上的操作是线性的,各小片内存间用链表相连,还是可以使用[],只是没有vector快。对deque排序,可以将其复制到vector中排完序后再复制回去。
  • list是一种双线性列表,只能顺序访问,不支持随机访问。对每个元素分配空间,不存在空间不够和重新分配的情况。
  • set是集合,支持快速查找,不允许有重复值,用平衡树结构来存储;multiset支持快速查找,允许有重复值。
  • map是映射,一对一映射,支持关键字快速查找,不允许有重复值;multimap是一对多映射,基于关键字查找,允许有重复值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值