容器(container)
:
容器都是类模板。它们实例化后就成为容器类
。用容器类定义的对象称为容器对象
。容器适配器(adaptors)
:
关联容器和顺序容器的根本不同在于:
顺序容器(sequential container)
:
可变长动态数组 vector
、双端队列 deque
、双向链表 list
。表1. 顺序容器与顺序容器适配器:
顺序容器 | 用途 | 顺序容器适配器 | 用途 | 底层基础容器 |
---|---|---|---|---|
vector | 可变长动态数组,支持快速随机访问 | stack |
后进先出(LIFO)堆栈 | 默认使用deque。满足条件的基础容器有 vector、deque、list |
list | 双向链表,支持快速插入/删除 | queue |
先进先出(FIFO)队列 | 默认使用deque。满足条件的基础容器有 deque、list |
deque | 双端队列 | priority_queue |
有优先级管理的队列 | 默认使用vector。满足条件的基础容器有vector、deque。 |
除了上面的表格之外还存在forward_list
顺序容器(单向链表,只支持单向顺序访问),请看文章链接
关联容器(Associative containers):
有序关联容器有以下四种:set、multiset、map、multimap。
关联数组(associative array)
:可使用键作为下标来获取一个值,正如内置数组类型一样。常用操作:
map查询操作 操作 | 作用 |
---|---|
m.count(k) | 返回 m 中 k 的出现次数 |
m.find(k) | 如果 m 容器中存在按 k 索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器 |
使用 count 检查 map 对象中某键是否存在:
1 | int occurs = 0; |
读取元素而不插入该元素:
1 | //find 操作返回指向元素的迭代器,如果元素不存在,则返回 end 迭代器: |
更好的请参考:《C++Primer》第十章-关联容器-学习笔记(1)-pair&map
multimap和 multiset 类型与相应的单元素版本具有相同的头文件定义:分别是 map 和set 头文件。
multimap 和 multiset 所支持的操作分别与 map 和 set 的操作相同,只有一个例外:multimap 不支持下标运算。
unordered_map
unordered_multimap
unordered_set
unordered_multiset
<vector>
:定义vector
序列模板,是一个大小可以重新设置的数组类型,比普通数组更安全、更灵活。<list>
:定义list
序列模板,是一个序列的链表,常常在任意位置插入和删除元素。<deque>
:定义deque
序列模板,支持在开始和结尾的高效插入和删除操作。<queue>
:为队列(先进先出)数据结构定义序列适配器queue
和priority_queue
。<stack>
:为堆栈(后进先出)数据结构定义序列适配器stack
。<map>
:map
是一个关联容器类型,允许根据键值是唯一的,且按照升序存储。multimap
类似于map,但键不是唯一的。<set>
:set
是一个关联容器类型,用于以升序方式存储唯一值。multiset
类似于set,但是值不必是唯一的。<bitset>
:为固定长度的位序列定义bitset
模板,它可以看作固定长度的紧凑型bool数组。类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。<array>
:(TR1)固定大小数组,支持复制。<forward_list>
:(c++11)单向列表,forward_list不提供随机访问,这一点跟list相同。forward_list
是一个单向链表,只支持单向顺序访问,在链表的任何位置进行插入/删除操作都非常快。<unordered_set>
:(TR1)无序容器set
,其元素随机存放。唯一键的集合,按键散列。multiset
类似于set,但是值不必是唯一的。<unordered_map>
:(C++11)(TR1)无序容器map
,其键值随机存放。键-值对的集合,由键散列,键是唯一的multimap
类似于map,但键不是唯一的。
完整的看C++中常用的std标准容器
底层数据结构为数组 ,支持快速随机访问
底层数据结构为双向链表,支持快速增删
底层数据结构:一般是vector为底层容器,堆heap为处理规则来管理底层容器实现
底层数据结构为红黑树,有序,不重复
底层数据结构为红黑树,有序,可重复
底层数据结构为红黑树,有序,不重复
底层数据结构为红黑树,有序,可重复
底层数据结构为hash表,无序,不重复
底层数据结构为hash表,无序,可重复
底层数据结构为hash表,无序,不重复
底层数据结构为hash表,无序,可重复
C++容器(STL容器)
C++语言学习(九)——C++标准库简介
Containers library(cppreference.com)
C++中常用的std标准容器 //可以做查找表
C++中容易忘的知识点——list和forward_list(四)//可做查寻表
C++ STL 的底层实现
C++标准模板库(STL)的容器的底层实现
C++STL的容器的底层实现详解//可以做查找表
Update your browser to view this website correctly. Update my browser now