STL中的容器,迭代器
一、容器
STL容器就是将运用最广泛的一些数据结构实现出来
常用的数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表 等
这些容器分为序列式容器和关联式容器两种:
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。
关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系
二、迭代器
容器和算法之间粘合剂
提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。
每个容器都有自己专属的迭代器
迭代器使用非常类似于指针
种类 | 功能 | 支持运算 |
---|---|---|
输入迭代器 | 对数据的只读访问 | 只读,支持++、==、!= |
输出迭代器 | 对数据的只写访问 | 只写,支持++ |
前向迭代器 | 读写操作,并能向前推进迭代器 | 读写,支持++、==、!= |
双向迭代器 | 读写操作,并能向前和向后操作 | 读写,支持++、--, |
随机访问迭代器 | 读写操作,可以以跳跃的方式访问任意数据,功能最强的迭代器 | 读写,支持++、--、[n]、-n、<、<=、>、>= |
eg: vector<int>::iterator pBegin = v.begin();
其中
v.begin()
返回一个迭代器,指向vector
中的第一个元素。pBegin
是一个vector<int>::iterator
类型的迭代器,保存了v
中第一个元素的位置。
遍历容器
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) {cout << *it << " "; // 输出迭代器所指向的元素
}
++it
:移动迭代器到下一个元素。--it
:移动迭代器到上一个元素。it++
和it--
:后缀操作符,先使用迭代器再移动。*it
:解引用迭代器,获取它所指向的元素。it == v.end()
:判断迭代器是否到达容器末尾。
迭代器的最大优势是与容器无关,提供了一致的接口,适用于不同类型的容器