STL学习笔记(第五章 STL组件)
STL组件
若干精心勾画的组件共同合作,构筑起STL的基础。这些组件最关键的是容器、迭代器和算法。
下图演示了STL组件之间的合作
容器(Containers)
容器类别(简称容器)用来管理一组元素。为了适应不同需求,STL提供了不同类型的容器。
总的来说,容器可分为两类:
1.序列式容器Sequence containers,此乃可序群集,其中每个元素均有固定位置(取决于插入时机和地点,和元素值无关)。
STL提供三个定义好的序列式容器:vector、deque和list。
2.关联式容器Associative containers,此乃已序群集,元素位置取决于特定的排序准则。
STL提供了四个关联式容器:set、multiset、map和multimap。
关于容器的具体操作将在第六章演示。
迭代器(Iterator)
迭代器是一个“可遍历STL容器内全部或部分元素”的对象。一个迭代器用来指出容器中的一个特定位置。基本操作如下:
Operator *
返回当前位置上的元素值。如果该元素拥有成员,可以直接以operator->取用它们。
Operator ++
将迭代器前进至下一元素。大多数迭代器还可使用operator--退回到前一个元素。
Operator ==和Operator !=
判断两个迭代器是否指向同一位置。
Operator =
为迭代器赋值(将其所指元素的位置赋值进去)。
所有容器类别都提供有一些成员函数,使我们得以获得迭代器并以之遍历访问所有元素。这些函数中最重要的是:
begin()
返回一个迭代器,指向容器起始点,也就是第一个元素(如果有的话)的位置。
end()
返回一个迭代器,指向容器借宿点。结束点在最后一个元素之后。
迭代器分类(Iterator Categories)
STL预先定义好的所有容器,其迭代器均属于以下两种类型:
1.双向迭代器(Bidirectional iterator)
双向迭代器可以双向行进:以递增运算前进或以递减运算后退。list、set、multiset、map和multimap这些容器锁提供的迭代器都属此类。
2.随机存储迭代器(Random access iterator)
随机存取迭代器不但具备双向迭代器的所有属性,还具备随机访问能力。即可以对该迭代器增加或减少一个偏移量、处理迭代器之间的距离、使用<和>之泪的操作符来比较两个迭代器。
vector、deque和strings锁提供的迭代器都属此类。
算法(Algorithm)
为了处理容器内的元素,STL提供了一些标准算法,包括搜寻、排序、拷贝、重新排序、修改、数值运算等十分基本而普遍的算法。
算法并非容器类别的成员函数,而是一种搭配迭代器使用的全局函数。
仿函数(Functors)
仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
例如我们定义一个类:
class X{
public:
return-value operator()(arguments) const;
...
};
然后就可以把这个类别的对象当做函数调用
X fo;
...
fo(arg1,arg2) //等价于fo.operator()(arg1,arg2);
最新文章
- 命名空间$.fn
- 程序开发使用docker部署
- BZOJ 2648: SJY摆棋子 kdtree
- Angular.js表单以及与Bootatrap的使用
- 第一课: iOS入门
- delphi启动 EditLineEnds.ttr 被占用问题
- Asp.Net Core(.net内核)
- 多控制器之UIApplication
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
- Springmvc整合mybatis
- Linux下tcpdump用法
- spring事务详解
- Git Workflow简介
- 我的coding地址
- python2与python3的区别(持续更新)
- Netbeans配置Java SE嵌入式平台(树莓派)
- M.U.G.E.N Error怎么办
- final修饰符的三种使用场景
- C++之string类
- C# 操作World生成报告
热门文章
- python--asyncio模块
- 【转】Talend作业设计模式和最佳实践-Part I
- Laravel 项目使用 Carbon 人性化显示文章发表时间
- 什么是web前端,全栈工程师就业前景怎么样?
- cl编译C文件的环境变量修改
- (6)sql/puls
- NDK安装教程 not a valid ndk directory -- Eclipse
- linux之rpm指令
- 【spring boot】集成了druid后,同样的mybatis模糊查询语句出错Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :&#39;name LIKE &#39;%&#39; ? &#39;%&#39;
- python3.6使用pickle序列化class