C++系列二:STL教程-容器+迭代器

zhouyitty / 2023-08-11 / 原文

目录
  • 前言
  • 容器
  • 迭代器


前言

……。


容器

//容器种类	功能
1. 序列容器	主要包括 vector 、list 、deque。
元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置,元素就会位于什么位置。
2. 排序容器	包括 set 、multiset、map 、multimap。
排序容器中的元素默认是由小到大排序好的,即便是插入元素,元素也会插入到适当位置。所以关联容器在查找时具有非常好的性能。
3. 哈希容器 hash_set、hash_multiset、hash_map、hash_multimap。(unordered_set,unordered_multiset,unordered_map, unordered_multimap)
和排序容器不同,哈希容器中的元素是未排序的,元素的位置由哈希函数确定。


//容器、底层数据结构、特点
//vector(向量)	        数组	支持快速随机访问
//list(列表)            双向链表	支持快速增删
//deque(双队列)            一个中央控制器和多个缓冲区	支持首尾(中间不能)快速增删,也支持随机访问
//stack(栈)       list 和 deque 实现,封闭头部即可,不用 vector 的原因应该是容量大小有限制 扩容耗时
//queue(队列)	            同上
//priority_queue(优先队列)    vector 为底层容器	堆 heap 为处理规则来管理底层容器实现
//set(集合)	                       红黑树	      有序,不重复
//multiset(多重集合)	           红黑树	      有序,不重复
//map(映射)	                       红黑树	      有序,不重复
//multimap(多重映射)	           红黑树	      有序,不重复
//hash_set(hash集合)	            hash 表	      无序,不重复
//hash_multiset(hash多重集合))	    hash 表	      无序,不重复
//hash_map(hash映射)	            hash 表	      无序,不重复
//hash_multimap(hash多重映射)	    hash 表	      无序,不重复

迭代器

//它可以是需要的任意类型,通过迭代器可以指向容器中的某个元素,如果需要,还可以对该元素进行读/写操作。
常用的迭代器按功能强弱分为输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器 5 种。输入迭代器和输出迭代器比较特殊,它们不是把数组或容器当做操作对象,而是把输入流/输出流作为操作对象。
前向迭代器(forward iterator)
假设 p 是一个前向迭代器,则 p 支持 p,p,*p 操作,还可以被复制或赋值,可以用 == 和 != 运算符进行比较。此外,两个正向迭代器可以互相赋值。

双向迭代器(bidirectional iterator)
双向迭代器具有正向迭代器的全部功能,除此之外,假设 p 是一个双向迭代器,则还可以进行 --p 或者 p-- 操作(即一次向后移动一个位置)。

随机访问迭代器(random access iterator)
随机访问迭代器具有双向迭代器的全部功能。除此之外,假设 p 是一个随机访问迭代器,i 是一个整型变量或常量,则 p 还支持以下操作:

array	随机访问迭代器
vector	随机访问迭代器
deque	随机访问迭代器
list	双向迭代器
set / multiset	双向迭代器
map / multimap	双向迭代器
forward_list	前向迭代器
unordered_map / unordered_multimap	前向迭代器
unordered_set / unordered_multiset	前向迭代器
stack	不支持迭代器
queue	不支持迭代器

正向迭代器	容器类名::iterator 迭代器名;
常量正向迭代器	容器类名::const_iterator 迭代器名;
反向迭代器	容器类名::reverse_iterator 迭代器名;
常量反向迭代器	容器类名::const_reverse_iterator 迭代器名;