算法头文件

要运用C++标准程序库的算法,首先必须包含头文件<algorithm>

使用STL算法时,经常需要用到仿函数以及函数配接器。它们定义域<functional>头文件中。

算法的分类

可以按以下分类方式描述各个STL算法:

非变动性算法(nonmodifying algorithms)

变动性算法(modifying algorithms)

移除性算法(removing algorithms)

变序性算法(mutating algorithms)

排序算法(sorting algorithms)

已序区间算法(sorted range algorithms)

数值算法(numeric algorighms)

非变动性算法

非变动性算法既不改变元素次序,也不改变元素值。它们透过input迭代器和forward迭代器完成工作,因此可作用于所有标准容器身上。

下表展示C++彼岸准程序库涵盖的所有非变动性算法:

最重要的算法之一便是for_each(),它将调用者提供的操作施加于每一个元素身上。例如可以用for_each()来打印区间内的每个元素。

for_each()也可以用来变动元素(如果传给它的操作行为会变动元素值的话),所以也可以说是变动性算法。

变动性算法

变动性算法,要不直接改变元素值,要不就是在复制在另一区间的过程中改变元素值(原区间不会发生变化)。

关联式容器的元素被视为常数,在变动元素的时候可能会违反容器的排序准则。因此变动性算法的目标区间不能是关联式容器。

下标列出了C++标准程序库涵盖的变动性算法。

最基本的变动性算法时for_each()和transform()。两者都可以变动序列中的所有元素值。他们的行为有以下不同点:

for_each()接受一项操作,该操作可变动其参数。因此该参数必须以by reference方式传递。例如:

  1. void square(int& elem) //call by reference
  2. {
  3. elem = elem * elem;
  4. }
  5. ...
  6. for_each(coll.begin(),coll.end(), //range
    square); //operation

transform()运用某项操作,该操作返回被改动后的参数。所以可以被用来将结果复制给原元素,例如:

  1. int square(int elem) //call by value
  2. {
  3. return elem * elem;
  4. }
  5. ...
  6. transform(coll.begin(),coll.end() //source range
  7. coll.begin(), //destination range
  8. square); //operation

移除性算法

移除性算法是一种特殊的变动性算法。他们可以移除某区间内的元素,也可以在赋值过程中执行移除动作。

与变动性算法类似,移除性算法的目标区间也不能使关联式容器。下表列出C++标准程序库涵盖的所有移除性算法:

移除算法只是在逻辑上移除元素。使用的手段是:将不需将移除的元素往前覆盖应被移除的元素。

因此它并不改变操作区间内的元素个数,而是返回逻辑上的新终点位置。

变序性算法

所谓变序性算法,是透过元素值的赋值和交换,改变元素顺序(但不改变元素值)。和变动性算法一样,变序性算法也不能以关联式容易作为目标。

下表列出了C++标准程序库涵盖的所有变序性算法:

排序算法

排序算法是一种特殊的变序性算法。下表列出C++标准程序库中所有的排序算法:

已序区间算法

所谓已序区间算法,是指其所作用的区间在某种排序准则下已序。下表列出C++标准程序库中涵盖的所有已序区间算法。

数值算法

数值算法以不同方式组合数值元素。下表列出C++标准程序涵盖的所有数值算法:

关于算法的使用跟例子将在后面详细讨论

STL学习笔记(算法概述)的更多相关文章

  1. STL学习笔记--算法

    关于STL算法需要注意的是: (1) 所有STL算法被设计用来处理一个或多个迭代器区间.第一个区间通常以起点和终点表示,至于其他区间,多数情况下只需提供起点即可,其终点可自动以第一区间的元素数推导出来 ...

  2. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  3. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  4. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  5. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  6. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  7. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  8. Effective STL 学习笔记 Item 21:Comparison Function 相关

    Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...

  9. Effective STL 学习笔记:19 ~ 20

    Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  10. Effective STL 学习笔记: 多用 vector & string

    Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...

随机推荐

  1. v4l2读取摄像头程序流程解析【转】

    转自:https://my.oschina.net/u/1024767/blog/210801 v4l2 操作实际上就是 open() 设备, close() 设备,以及中间过程的 ioctl() 操 ...

  2. 华为上机测试题(求亮灯数量-java)

    PS:自己写的,自测试OK,供大家参考. /* 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1.2.3.…n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着.有n个学 ...

  3. OpenStack基础概念

    openstack 组件介绍 1.horizon -- UI模块 为云管理提供整体视图,以实现资源整合和管理配额 为终端用户提供自动服务门户,在自由范围内自由操作,使用资源 2.keystone -- ...

  4. python 操作数据库1--连接、执行sql语句

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/20 16:03 # @Author : lijunjiang # @Fi ...

  5. VSCode配置c++环境简单教程

    VSCode配置c++环境简单教程 1.下载MinGW 安装有关gdb,gcc,g++的所有包 2.文件夹 打开一个文件夹 在里面随便写一个cpp 不管是VS还是VSCode,它的基本操作单位都是文件 ...

  6. python接口自动化9-https请求(SSL)【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E ...

  7. jsp/el和jstl动态页面

    一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> - ...

  8. sql 事物 锁 快照(转发的,写的非常好)

    隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而不会影响写操作申请的互斥锁(Exclusive Lock),隔离级 ...

  9. HDU 2553 N皇后问题(回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...

  10. python 字符串最长公共前缀

      编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow&qu ...