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组件)的更多相关文章

  1. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  2. [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像

    [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...

  3. 《Spring实战》学习笔记-第五章:构建Spring web应用

    之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...

  4. opencv图像处理基础 (《OpenCV编程入门--毛星云》学习笔记一---五章)

    #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgu ...

  5. 【马克-to-win】学习笔记—— 第五章 异常Exception

    第五章 异常Exception [学习笔记] [参考:JDK中文(类 Exception)] java.lang.Object java.lang.Throwable java.lang.Except ...

  6. 学习笔记 第五章 使用CSS美化网页文本

    第五章   使用CSS美化网页文本 学习重点 定义字体类型.大小.颜色等字体样式: 设计文本样式,如对齐.行高.间距等: 能够灵活设计美观.实用的网页正文版式. 5.1 字体样式 5.1.1 定义字体 ...

  7. [汇编学习笔记][第五章[BX]和loop指令]

    第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...

  8. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  9. Linux学习笔记(第五章)

    第五章-常用指令 下达指令: 1.[Tab] 2.man + (指令):显示操作说明 开头代号 man page 常用按键

  10. o'Reill的SVG精髓(第二版)学习笔记——第五章

    第五章 文档结构 5.1 结构与表现 XML的目标之一便是提供一种能将结构从视觉表示中独立出来的方法. 但是不幸的是,关于XML的很多讨论都强调结构而非表现. 我们将通过详细讨论如何在SVG中指定表现 ...

随机推荐

  1. cocos2d-iphone心得

    源码下载地址: http://code.google.com/p/cocos2d-iphone/downloads/list https://github.com/cocos2d/cocos2d-ip ...

  2. android hook 框架 libinject 如何实现so注入

    前面两篇 android hook 框架 libinject2 简介.编译.运行 android hook 框架 libinject2 如何实现so注入 实际运行并分析了 Android中的so注入( ...

  3. Error:Execution failed for task ':bearBabyClient:processDebugManifest'. > Manifest merger failed with multiple errors, see logs

    具体报错如上: 在右侧中 大方块圈中的[com.android.support:support-v4:26.0.0-alpha1] 这个文件导致的,在这的清单文件第27行合并失败,让使用tools:r ...

  4. java的unity单元测试

    import org.junit.After; import org.junit.Before; import org.junit.Test; public class TestUnit { publ ...

  5. EXCEL匹配结果match并跳转链接hyperlink

    1,有时候想要搜索另一个表格中含有相同内容的项,然后跳转到搜索结果单元. 需要用到两个函数,MATCH和HYPERLINK 2,A表格如下 B表格如下 3,在B2单元格中输入函数 =HYPERLINK ...

  6. 异步 JavaScript 之理解 macrotask 和 microtask(转)

    这个知识点... https://blog.keifergu.me/2017/03/23/difference-between-javascript-macrotask-and-microtask/? ...

  7. Ubunntu kylin下安装VmWare Tools(简洁方法)

    1.在VM菜单栏单击虚拟机,选择安装Vmware tools(或者是重装Vmware Tools) 2.会弹出一个界面,就是光盘加载的那个界面,里面有个.******.gz文件 3.复制到桌面(你喜欢 ...

  8. CF985A Chess Placing【思维】

    [链接]:CF985A [题意]:给你n和n/2个数ai,每个ai和奇数.偶数比较距离(注意选了奇数,偶数的距离就不要算了,反之同理),求最小的答案. [代码]: #include <iostr ...

  9. 模拟【p2239】 螺旋矩阵

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述--->p2239 螺旋矩阵 看到题,很明显,如果直接模拟的话,复杂度为\(O(n^2)\)过不去.(这个复杂度应该不正确,我不会分 ...

  10. NOIP2016_day1_No1玩具谜题

    #include <iostream> #include <cstdio> using namespace std; int main () { freopen("t ...