一、算法

算法是以函数模板的形式实现的。常用的算法涉及到比较、交换、查找、搜索、复制、修改、移除、反转、排序、合并等等。

算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用。

算法的优势在于只需实作一份,可以适应所有的容器,不必为每一种容器量订制。也可以与用户定义的容器搭配。

算法尾词:

_if

比如find(按某个值来查找),find_if(按某个条件来查找)

_copy

这个尾词用来表示在算法中,元素不光被操作,还会被复制到目标区间。比如reverse、reverse_copy

二、算法分类

1、非变动性算法既不改变元素次序,也不改变元素值。

2、变动性算法,要么直接改变元素值,要么就是在复制到另一个区间的过程中改变元素值。如果是第二种情况,原区间不会发生变化

3、移除性算法是一种特殊的变动性算法。移除性算法是在一区间内移除某些元素,这些算法并不能改变元素的数量,它们只是以逻辑上的思考,将原本置于后面的“不需要移除元素”向前移动,覆盖那些被移除元素而已。它们都返回新区间的逻辑终点。移除性算法也可以在复制的过程中执行移除。注意,目标区间不能是关联式容器。

4、变序性算法改变元素次序,但不改变元素值。这些算法不能用于关联式容器,因为关联式容器中,元素有固定的次序。

5、排序算法,排序算法是一种特殊的变序算法。但比一般的变序性算法更复杂,花费更多的时间

6、已序区间算法,一般来说这些算法的结果,仍然是已序的。

7、用来处理数值的算法,需要加上头文件 #include<numeric>

在后面的文章中将对7种算法分别举一些例子来示例。

参考:

C++ primer 第四版
Effective C++ 3rd
C++编程规范

从零开始学C++之STL(四):算法简介、7种算法分类的更多相关文章

  1. 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)

    一.移除性算法 (remove)  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

  2. [转贴]从零开始学C++之STL(一):STL六大组件简介

    一.STL简介 (一).泛型程序设计 泛型编程(generic programming) 将程序写得尽可能通用 将算法从数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 (二 ...

  3. 从零开始学ios开发(四):IOS控件(1),Image View、Text Field、Keyboard

    长话短说,谢谢大家的关注,这篇写了好长时间,下面继续学习ios.我将用2到3篇的篇幅来学习iphone上的一些常用控件,包括Image View.Text Field.Keyboard.Slider等 ...

  4. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, cl ...

  5. 从零开始学spring cloud(一) -------- spring cloud 简介

    1.微服务简介 1.1.单体架构 一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.架构单体应用的方法论,我们称之为单体应用架构. 缺点:1. 复杂性高以笔者经手的一个 ...

  6. [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template <  class _Ty,  ...

  7. 从零开始学Electron笔记(四)

    在之前的文章我们介绍了一下Electron的这个remote模块,接下来我们继续说一下Electron的右键菜单的制作. 在我们日常我们使用的软件中都会存在右键菜单的情况,比如我们用到的浏览器,开发所 ...

  8. 从零开始学安全(三十四)●百度杯 ctf比赛 九月场 sqli

    先扫后台发现 两个可疑登录界面 l0gin.php login.php 猜测是第一个 用bp 抓包发现 index.php 中间有302 重定向 头文件 里面有一个 page=l0gin.php 应该 ...

  9. 从零开始学安全(二十四)●用Nmap发现主机

    首先了解端口状态 常用 都是 open closed  filtered    状态 打开  cmd  输入  nmap -A  192.168.11.11   后面是你的 ip 可以扫描打开的端口状 ...

随机推荐

  1. 如此高效通用的分页存储过程是带有sql注入漏洞的

    原文:如此高效通用的分页存储过程是带有sql注入漏洞的 在google中搜索“分页存储过程”会出来好多结果,是大家常用的分页存储过程,今天我却要说它是有漏洞的,而且漏洞无法通过修改存储过程进行补救,如 ...

  2. Linux中iptables设置详细

    无论如何,iptables是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法SSH,那就等着被老板骂吧,呵呵... 一下内容是为了防止这种情况发生而写的,当然很初级,不过一般服务 ...

  3. POJ 3067 Japan 树状数组求逆序对

    题目大意:有两排城市,这两排城市之间有一些路相互连接着,求有多少条路相互交叉. 思路:把全部的路先依照x值从小到大排序,x值同样的依照y值从小到大排序,然后插入边的时候,先找有多少比自己y值小的,这些 ...

  4. 怎样在Upstart机制下的系统中加入upstart事件型的任务

    /*********************************************************************  * Author  : Samson  * Date   ...

  5. Linux下使用cat制作“内涵图”

    http://blog.csdn.net/odaynot/article/details/7939869

  6. vi/vim多行注释和取消注释

    多行注释: 1. 进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来 2. 按大写字母I,再插入注释符,例如// 3. 按esc键 ...

  7. windows服务安装启动报错误1053:服务没有及时响应启动或控制请求

    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0&qu ...

  8. 利用Matlab生成一个网格化的三维三轴椭球面(生成直角坐标)

    代码很简单,a,b,c分别为椭球的三轴轴长,a=b=c时得到的是三维球面,a=b!=c时得到的是三维椭球面,a!=b且a!=c且b!=c时得到的是三维旋转椭球面 %生成一个笛卡尔坐标系下三轴椭球表面的 ...

  9. C#排序算法

    随笔- 41  文章- 0  评论- 25  C#排序算法小结   前言 算法这个东西其实在开发中很少用到,特别是web开发中,但是算法也很重要,因为任何的程序,任何的软件,都是由很多的算法和数据结构 ...

  10. Intellij Idea/Webstorm/Phpstorm

    Intellij Idea/Webstorm/Phpstorm 的高效快捷键   1. shift + F6可以理解为F2的豪华重量版,不但可以重命名文件名,而且可以命名函数名,函数名可以搜索引用的文 ...