《C++标准程序库》学习笔记(四)算法

原创 2011年01月08日 16:17:00

为了处理容器内的元素,STL提供了一些标准算法,包括搜寻、排序、拷贝、重新排序、修改、数值运算等十分基本而普遍的算法。

算法并非容器类别的成员函数,而是一种搭配迭代器使用的全局函数。

 

区间

所有算法都用来处理一个或多个区间内的元素。

调用者必须确保经由两参数定义出来的区间是有效的(valid)。所谓有效就是:从起点出发,逐一前进,能够到达终点。也就是说,程序员自己必须确保两个迭代器隶属于同一个容器,而且前后放置正确。

所有算法处理的都是半开区间(half-open ranges)——含括起始元素位置但不含括结尾元素位置。传统的数学表示方法为:

[begin, end)

 

处理多个区间

有数个算法可以(或说需要)同时处理多个区间。通常你必须设定第一个区间的起点和终点,至于其它区间,你只需设定起点即可,终点通常可由第一个区间的元素推导出来。

注意:如果某个算法用来处理多个区间,那么当你调用它时,务必确保第二(以及其它)区间所拥有的元素个数,至少和第一个区间内的元素个数相同。

 

算法分类

STL算法可以分为以下几类:

算法

说明

非变动性算法(nomodifying algorithms

既不改动元素次序,也不改动元素值。它们透过input迭代器和forward迭代器完成工作,因此可用于所有标准容器身上。如:for_each()

变动性算法(modifying algorithms

要么直接改变元素值,要么就是在复制到另一区间的过程中改变元素值。如果是第二种情况,原区间不会发生变化。这些算法的目标区间不能是关联式容器。如:for_each()transform()

移除性算法(Removing Algorithms

根据元素值或某一准则,在一个区间内移除某些元素。这些算法并不能改变元素的数量,他们只是在逻辑上将原本置于后面的“不移除元素”向前移动,覆盖那些被移除元素而已。它们都返回新区间的逻辑终点(也就是最后一个“不移除元素”的下一位置)。这些算法的目标区间不能是关联式容器。如:remove()

变序性算法(Mutating Algorithms

改变元素的次序,但不改变元素值。这些算法的目标区间不能是关联式容器。如:reverse()

排序算法(Sorting Algorithms

完全排序、局部排序。如:sort()

已序区间算法(Sorted Range Algorithms

针对已序区间执行的算法,执行前提是源区间必须在某个排序准则下已序(sorted)。如:binary_search()

数值算法(Numeric Algorithms

用于数值处理。运用数值运算之前必须先含入头文件<numeric>

#include <numeric>。如:accumulate()

 

C++标准程序库 学习笔记 第九章 STL算法

算法分类: 非变动性算法,变动性算法,移除性算法,变序性算法,排序算法,已序区间算法,数值算法。 1. for_each 算法,调用函数时传递的是值,而不是指针。要改变值,可以传递引用~~。...

《C++标准程序库》学习笔记(三)迭代器

《C++标准程序库》学习笔记(三)迭代器
  • buyicn
  • buyicn
  • 2011年01月08日 15:46
  • 799

C++标准程序库学习笔记(一)

1.关联式容器(set,multiset,map,multimap)已经排好序,如果是string类型则为字典序。 2.typedef vector s1;//并没有一个对象,而是用s1去声...

C++标准程序库 学习笔记 第十章 特殊容器

特殊容器: stack 栈 queue 队列 priority_queue优先队列~      特殊容器没有迭代器的哟~~ 1. stack 栈   默认由deque实作而成~    主要是...

C++标准程序库 学习笔记 第二章 && 第三章

第二章  C++及标准程序库简介 1.通过在成员名前加上 typename,可以告诉编译器将成员当作类型. C++规定,除了以typename修饰之外.template内的任何标识符号都被视为一个值...

《C++标准程序库》学习笔记(二)容器

容器,用来管理某类对象的集合。 图1 STL的容器种类 序列式容器(Sequence Containers) STL内部预先定义好以下三个序列式容器: l Vectors l ...
  • buyicn
  • buyicn
  • 2011年01月08日 13:52
  • 1043

《C++标准程序库》学习笔记(一)C++相关特性

抱着本厚厚的《C++标准库》读了几天,想想也该写点关于用法的总结,一来怕今后容易忘记,二来将书上的事例重新敲一遍,巩固对程序库相关知识的了解。今天开第一篇,以后不固定更新。当然,笔者所读为该书为基于C...

C++标准程序库 学习笔记 第五章 STL(标准模板库概述)

1. 容器 关联容器的排序问题,默认为operator > iset;      greater 为一个类类型(greater() 调用默认构造函数,返回临时对象,) eg:     //...

《C++ 标准程序库--侯捷》学习笔记

C++标准每5年会有一个新版本,1998的C

C++标准程序库笔记(2)

一般概念 1、命名空间 C++标准程序库中的所有标识符都被定义于一个名为std的namespace中 使用C++标准程序库的任何标识符时,有3种选择 (1)、直接指定 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《C++标准程序库》学习笔记(四)算法
举报原因:
原因补充:

(最多只允许输入30个字)