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);
STL学习笔记(第五章 STL组件)的更多相关文章
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像
[HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...
- 《Spring实战》学习笔记-第五章:构建Spring web应用
之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...
- opencv图像处理基础 (《OpenCV编程入门--毛星云》学习笔记一---五章)
#include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgu ...
- 【马克-to-win】学习笔记—— 第五章 异常Exception
第五章 异常Exception [学习笔记] [参考:JDK中文(类 Exception)] java.lang.Object java.lang.Throwable java.lang.Except ...
- 学习笔记 第五章 使用CSS美化网页文本
第五章 使用CSS美化网页文本 学习重点 定义字体类型.大小.颜色等字体样式: 设计文本样式,如对齐.行高.间距等: 能够灵活设计美观.实用的网页正文版式. 5.1 字体样式 5.1.1 定义字体 ...
- [汇编学习笔记][第五章[BX]和loop指令]
第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...
- [Python学习笔记][第五章Python函数设计与使用]
2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...
- Linux学习笔记(第五章)
第五章-常用指令 下达指令: 1.[Tab] 2.man + (指令):显示操作说明 开头代号 man page 常用按键
- o'Reill的SVG精髓(第二版)学习笔记——第五章
第五章 文档结构 5.1 结构与表现 XML的目标之一便是提供一种能将结构从视觉表示中独立出来的方法. 但是不幸的是,关于XML的很多讨论都强调结构而非表现. 我们将通过详细讨论如何在SVG中指定表现 ...
随机推荐
- [LeetCode] Combinations 回溯
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- oracle 的数组(转)
declare type t_indexby is table of number index by binary_integer; type t_nested is table of number; ...
- C++ delete 两次
转载自:http://blog.csdn.net/jxluofeng/article/details/19766801 <问题>危险的代码: int* p=new int(1); de ...
- 第2章 掌握C++
参考: https://blog.csdn.net/u014162133/article/details/46573873 1.C++主要特点: 封装性(Encapsulation):把数据与操作数据 ...
- 【原创】Oracle 11g R2 Client安装配置说明(多图详解)
1. 准备工作 安装Oracle11gR2client的时候,如果刚从网上下载的Oracle client,可能无法再2008 R2或者2012 R2的服务器上面运行. 报错:[INS-13001]环 ...
- C/C++/C#程序如何打成DLL动态库
C/C++程序如何打成DLL动态库:1.在VS中新建main.h,添加如下内容:extern "C" _declspec(dllexport) int onLoad(); 2.新建 ...
- 推荐一本迷你中文书《JavaScript Promise迷你书(中文版)》
https://github.com/azu/promises-book http://it-ebooks24.com/ebook/mastering-javascript-promises 传值,调 ...
- Delphi 的TSpeedButton按下和弹起效果
想达到这样的效果: 点击一下TSpeedButton按钮,按钮凹下去,再点击一下,按钮弹起恢复. 实现方法: 只要设置下述2个属性即可,不需要编码: ①AllowAllUp = True ②Group ...
- J.U.C并发框架源码阅读(四)CountDownLatch
基于版本jdk1.7.0_80 java.util.concurrent.CountDownLatch 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use i ...
- MFC学习1
引用:http://v.youku.com/v_show/id_XMjM3MTI1ODky.html MSG 窗口——一般是程序在屏幕上的不同的矩形区域。 窗口句柄——标识窗口类型的类(资源的标识) ...