STL和容器、迭代器、算法之间的关系

程序是数据结构加算法。
STL是一个小程序库,之所以说小,是因为容器模板中常用的容器有限,其中一个个容器就是一种数据结构,算法通过迭代器对容器中的数据进行访问,即组成一个小小的程序。
使用容器之前首先要根据自己使用的数据集合将要对数据结构采取的访问模式,决定使用STL中的何种容器类型。
容器类型:
顺序容器
vector 从后面快速的插入与删除,直接访问任何元素
deque 从前面或后面快速的插入与删除,直接访问任何元素
list 双链表,从任何地方快速插入与删除
关联容器
set 快速查找,不允许重复值
multiset 快速查找,允许重复值
map 一对多映射,基于关键字快速查找,不允许重复值
multimap 一对多映射,基于关键字快速查找,允许重复值
容器适配器
stack 后进先出
queue 先进先出
priority_queue 最高优先级元素总是第一个出列

迭代器
我们使用容器的时候,迭代器是一个不可分割的部分,迭代器在STL中用来将算法和容器联系起来,起着一种胶着器的作用。迭代器是一种检查容器内元素并遍历元素的数据类型。迭代器是一种行为类似指针的对象,它提供类似指针的功能,对容器成员的内容进行访问。
每个迭代器和容器是绑定的

vector<int>::iterator iter;

map
C++中map容器提供一个键值对(key/value)容器,map与multimap差别仅仅在于multiple允许一个键对应多个值,对于迭代器来说,可以修改实值,而不能修改key,map会根据key自动排序。
map是键-值对的集合,map类型通常可理解为关联数组,可使用键作为下标来获取一个值,正如内置数组类型一样,而关联的本质在于元素的值与某个特定的键相关联,并非通知元素在数组中的位置来获取。

map<int,string> map1;

STL六大组件是:容器、算法、迭代器、仿函数、配接器、配置器
STL的核心是容器和算法,一般就是用算法操作容器。
在算法操作容器的时候,往往需要使用迭代器来遍历容器。算法往往是一些比较通用的算法,比如查找和排序,要想适应各种各样的数据结构,只能利用数据结构自己提供的迭代器来访问了。
容器在存储数据的时候,则需要利用空间配置器来分配和释放内存。
有些容器在本质上是一种数据结构,但对外体现的接口不一致,这种就是利用适配器模式对数据结构进行了封装(queue和stack本质上都是对deque的封装)。
另外,在算法操作容器的时候,通常需要配置一种策略,比如排序的策略可以是升序也可以是降序。而这些策略,则是通过仿函数来提供的。

发布了39 篇原创文章 · 获赞 10 · 访问量 739

猜你喜欢

转载自blog.csdn.net/weixin_43393776/article/details/100800802
今日推荐