STL从广义上分为三类:算法,容器和迭代器。容器和算法可以通过迭代器进行无缝的衔接。STL的优点:高可重用性,高性能,高移植性,跨平台。
2. 迭代器 iterator
迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。STL提供的每种容器的实现原理不一样,所以每个容器中都实现了一个迭代器用来对容器中对象进行访问。虽然容器中的迭代器实现方式不一样,但是对于用户来说操作方式是一致的。迭代器统一了对所有容器的访问方式。相当于不同手动挡车的挂档是一样的,但是内部的变速箱是不一样的。
作用:提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。
int main() {
vector<int> vecIntA;
int iArray = {100, 1, 20, 30, 40};
vecIntA.assign(iArray, iArray+5);
//构造一个迭代器对象
vector<int>::iterator it;
//it指向容器中的第一个元素
it = vecIntA.begin();
//输出为100
3. 容器
容器的分类:序列式容器和关联式容器
在实际的开发过程中,合理组织数据的存取与选择处理数据的算法同等重要,存取数据的方式往往会直接影响到对它们进行增删改查操作的复杂程度和时间消耗。事实上,当程序中存在对时耗要求很高的部分时,数据结构的选择就显得尤为重要,有时甚至直接影响程序执行的成败。
值得一提的是,之前我们一直在不断地重复实现一些诸如链表、集合等等这些常见的数据结构,这些代码使用起来往往都十分类似,只是为了适应不同数据的变化,可能需要在一些细节上做不同的处理。
那么大家有没有想过,是不是可以重复利用那些已有的实现来完成当前的任务呢?当然是可行的,有些读者已经亲自编写并实现了动态数组类、链表类、集合类等程序,并精心维护着。其实,STL 中提供了专家级的几乎我们所需要的各种容器,功能更好,复用性更高。
简单的理解容器,它就是一些模板类的集合,但和普通模板类不同的是,容器中封装的是组织数据的方法(也就是数据结构)。
3.1 序列式容器
每个元素都有固定的位置,取决于插入时机和地点,和元素值无关。
包括:vector,deque,list,stack,queue
3.1.1 vector
随机迭代器
3.1.2 deque
随机迭代器
3.1.3 list
list迭代器是双向迭代器,可以从两个方向读写容器,可以提供前置和后置的自减运算
C++ list容器详解_list容器函数原型_&不逝的博客-CSDN博客
3.1.4 stack
3.1.5 queue
3.2 关联式容器
元素位置取决于特定的排序准则,和插入顺序无关。
包括:set,multiset,map,multimap
3.2.1 set
数据结构——红黑树(详解性质+C++模拟)_暮雨清秋.L的博客-CSDN博客
3.2.2 map