STL笔记介绍

6 篇文章 0 订阅

STL组件介绍

关于STL前世今生之类的介绍就不多说了,网上很多,没事就去看看,挺没趣的。我尽量表达的言简意赅,方便自己和能看到这篇文章的朋友理解,此文中大量引用,不要见怪。

STL(Standard Template Library)是C++标准程序库的核心,若干组件共同合作构成了STL的基础。
其 最关键的组件是 1 容器, 2 迭代器 , 3 算法
除此之外还有 4 仿函数(functors), 5 配接器(adapters), 6 配置器(allocators)

今天先主要就前三个组件进行简单介绍

容器(Containers)

容器设计用来管理某类对象的集合。每一种容器有其优缺点,于是STL提供了不同类型的容器以满足不同的应用场景。

容器大体上分为两类:序列式容器(Sequence Containers),关联式容器(Associative Containers)

序列式容器为可序(ordered)群集,其中每个元素都有一个固定位置——取决于插入的时机和地点,和元素值无关。
STL提供了vectordequelist三个序列式容器。
vector 将其中的元素放在动态数组中加以管理。vector允许随机存取,即能使用索引访问其中任意位置的元素,vector尾部进行插入删除操作均极为方便。
deque (double-ended queue)也是动态数组,可以向两端发展,因此不论在尾部或者头部安插元素都十分迅速。
list双向链表(doubly linked list) 实作而成。根据双向链表的结构特征,list内的每个元素都以一部分内存指示前 驱元素和后继元素,同时也决定了list并不能支持随机存取,不过list相对于vectordeque的优势在于容器任何位置上的安插和删除操作都会在常数时间内完成。

关联式容器为已序(sorted)群集,元素的位置取决于特定的排列准则,也就是群集内元素的位置取决于元素值,同插入顺序无关。通常关联式容器由排序二叉树实作出来。关联式容器的差别主要在于元素的类型以及处理元素时的方式。
STL同样提供了set , multiset , map , multimap四个标准容器。

set 内部元素依据其值自动排序,每个元素值只能出现一次,不允许重复。
multisetset相同,只不过其中的元素允许重复,其中可以包含多个值相同的元素。
mapk/v型数据结构,每个元素由一个key(k),作为排序的准则,其中每个key只能出现一次,不允许重复。map可以被视为关联式数组(associative array),也就是任意索引型别(index type)
multimapmap相同,但允许元素重复,也就是说multimap可以包含多个键值(key)相同的元素。

迭代器(Iterators)

迭代器是用来在一个对象群集的元素上进行遍历的动作。这个对象群集或许是容器,或许是容器的一部分,迭代器的主要好处是为所有的容器提供了一组很小的公共接口,利用这个接口,某项操作就行进至群集内的下一个元素。至于具体如何实现,取决于群集内部结构。

迭代器是容器与算法之间的胶合剂,传说中的“泛型指针”。一个迭代器用来指出容器中的一个特定位置。
基本操作包括
1 Operator* 返回当前位置上的元素值.另外 对于该元素的成员变量,可以直接使用operator->(arrow)符号访问
2 Operator++ 将迭代器前进至下一个元素。多数迭代器还可以使用Operator–退回到前一个元素
3 Operator ==Operator!= 判断两个迭代器是否指向同一位置
4 Operator= 为迭代器赋值(将其所指元素的位置赋值过去)

迭代器是smart pointers,具有遍历复杂数据结构的能力,其下层运行机制取决于其遍历的数据结构,也要求每个容器类别都必须提供自己的迭代器。
所 所有的容器类别都提供一些关键的成员函数
begin() 返回一个迭代器,指向容器的起始点,也就是第一个元素(如果有的话)的位置。
end() 返回一个迭代器,指向容器的结束点。值得注意的是,结束点也最后一个元素之后,这样的迭代器也称作 past-the-end 迭代器。

迭代器分类(Interator Categories)
出了基本操作之外,迭代器还有其他的能力。这些能力取决于容器的内部结构。STL总是指提供效率比较出色的操 作,因此,如果容器允许随机存取(如vector deque),那么它们的迭代器也能进行随机操作。根据能力的不同,迭代器被划分为五种不同的类属。STL预先定义好的所有的容器,其迭代器均属于一下两种类型。

1 双向迭代器 (Bidirectional iterator)
顾名思义,双向迭代器可以双向行进:以递增(increment)运算前进或以递减(decrement)运算后退。list 、set、 multiset、 map、 multimap 这些容器所提供的迭代器都属此类。
2 随机存取迭代器(Random access interator)
随机存取迭代器不但具备了双向迭代器上的所有属性,还具备随机访问能力。vector、deque、strings所提供的迭代器都属此类。

算法 (Algorithms)

算法是用来处理群集内的元素,主要功能是查找、 排序 、修改 使用群集内的元素。算法并非容器类别的成员函数,而是一种搭配迭代器使用的全局函数。通过迭代器的帮助,只需要编写一次算法就可以将他应用在任意容器之上。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值