Quantcast
Channel: 董的博客 » C++ Primer plus
Viewing all articles
Browse latest Browse all 3

《C++ Primer plus》学习笔记之”标准模板库”

$
0
0


本博客微信公共账号:hadoop123(微信号为:hadoop-123),分享hadoop技术内幕,hadoop最新技术进展,发布hadoop相关职位和求职信息,hadoop技术交流聚会、讲座以及会议等。二维码如下:


1. 基本概念

标准模板库(STL)是容器类模板,迭代器类模板,函数对象模板和算法函数模板的集合,它们的思想是一致的,都是基于通用编程技术原则的,算法通过使用模板,从而独立于所存储的对象类型;通过使用迭代器接口,从而独立于容器的类型。迭代器是广义的指针。

2. 容器类模板http://www.cplusplus.com/reference/stl/

线性容器:vector(相当于数组),list(相当于双向链表)和deque(双向队列,融合了数组和链表的优点)

适配器容器:stack(栈),queue(队列)和priority_queue(优先队列),均是基于vector的

联合容器:set(集合),multiset,map(映射,相当于一个简单的key/value表),multimap

其他:bitset(位图)

3. 迭代器类模板

不同的算法对迭代器的要求不同,如,查找算法要求定义++操作符,以便迭代器遍历整个容器;而排序算法要求能随机访问,以便交换两个不相邻元素。STL定义了五种迭代器:输入迭代器(单向只读迭代器,可能递增,但不能倒退),输出迭代器(单向只写迭代器),正向迭代器(能同时读写数据),双向迭代器(能够双向遍历迭代器进行读写数据),随机访问迭代器。

迭代器具有层次结构,正向迭代器具有输入迭代器和输出迭代器的所有功能,同时还有自己的功能;双向迭代器具有正向迭代器的所有功能,同时还有自己的功能;随即访问迭代器具有双向迭代器的所有功能,同时还有自己的功能。

迭代器是广义指针,指针满足所有迭代器的要求。

4. 函数对象

(1)概念

函数对象也叫函数符,它是可以以函数方式与()结合使用的任意对象。这里包括函数名、指向函数的指针和重载了()操作符的类对象。

函数符的概念:

生成器是不用参数就可以调用的函数符

一元函数是用一个参数可以调用的函数符,如:提供给for_each()的函数符应该是一元函数,因为它每次用于一个容器元素。

二元函数是用两个参数可以调用的函数符

返回bool值的一元函数是断言

返回bool值得二元函数是二元断言

一些STL函数需要断言参数或者二元断言参数,如sort的第三个参数:

bool WorseThan(const Review * r1, const Review *r2);

……

sort(book.begin(), book.end(), WorseThan);

(2) 预定义的函数符

对于所有内置的算术操作符,关系操作符和逻辑操作符,STL都提供了等价的操作符,如:

“+”对应plus,“<”对应greater,“&&”对应logical_and

 

5. 算法

STL包含了很多处理容器的非成员函数,如:sort(),copy()等,他们均使用迭代器标识要处理的数据区间和结果的放置位置。对于算法函数设计,有两个通用部分。首先,他们都是用模板来提供通用类型;其次,它们都是用迭代器来访问容器中数据的通用表示,

算法组(http://www.cplusplus.com/reference/algorithm/

共四类,分别为:非修改式序列操作,修改式序列操作,排序和相关操,通用数字运算。

【1】非修改式序列操作:对区间中每个元素进行操作,但这些操作不修改内容,如find()和for_each()

【2】修改式序列操作:会修改值,也可以修改值的排列顺序,如transformer(),random_shuffle(),copy()等.

【3】排序和相关操作包括多个排序函数(如sort(),stable_sort()等)和其他各种函数,包括集合操作

【4】数字操作:包括区间的内容累计,计算两个容器的内部乘积等。

 

原创文章,转载请注明: 转载自董的博客

本文链接地址: http://dongxicheng.org/cpp/cpp-stl/

作者:Dong,作者介绍:http://dongxicheng.org/about/

本博客的文章集合:


Copyright © 2013
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)

Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images