zoukankan      html  css  js  c++  java
  • STL算法概述

    简介


    所有STL算法都被设计用来处理一个或多个迭代器区间,第一个区间通常是以起点和终点表示,至于其他区间,多数情况下只需要提供起点即可,其终点区间可自动以第一区间的元素数量推导出来。STL算法采覆盖(overwrite)模式而非安插(insert)模式,所有调用者必须保证目标区间拥有足够的元素空间,除非使用安插型迭代器适配器。

    为了提高灵活性和功效,某些STL算法支持使用者传递自定义的操作,这些操作可以是一般函数,也可以是仿函数,如果其返回值是bool类型的,便称为条件判断式(predicate),条件判断式的主要作用,在其他博文里也有体会到,这里统一总结、记录下:

    1、对于搜寻算法,我们可以传递一个函数或者仿函数,指定一个一元判断式作为搜寻准则。该一元判断式用来判断元素是否符合元素条件。

    2、对于排序算法,我们可以传递一个函数或者仿函数,指定一个二元判断式作为排序准则,该二元判断式用来比较两元素。

    3、我们可以传递一个一元判断式作为准则,判断是否应该对某元素施以某项运算,例如可以令奇数元素被移植。

    4、我们可以为某个数值算法指定一个数值运算。

    需要注意的是,判断式不应该在函数调用过程中改变其自身状态


    算法分类

    首先介绍STL算法中两个特别的尾尺

    1、尾词 _if

    算法如果有两种形式,参数个数都相同,但第一个形式会要求传递一个值,第二种形式会要求传递一个函数或者仿函数,无_if尾词的那个是传递数值,有尾词_if要求传递函数或者仿函数

    2、尾词 _copy

    这个尾词用来表示在此算法中,元素不关被操作,还会被复制到目标区间

    STL算法中大致可以按照以下几种进行分类,分别是:

    1、非变动性算法(nonmodifying algorithms)

    2、变动性算法(modifying algorithms)

    3、移除性算法(removing algorithms)

    4、变序性算法(mutating algorithms)

    5、排序性算法(sorte algorithms)

    6、已排序区间算法(sorted range algorithms)

    7、数值算法(numeric algorithms)


    非变动性算法

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


    变动性算法

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


    移除性算法

    移除性算法是一种特殊的变动性算法,它们可以移除某区间内的元素,也可以在复制过程中执行移除操作。需要注意的是,移除算法只是在逻辑上移除元素,手段是:将不需要被移除的元素往前覆盖应被移除的元素,因此移除性算法并不改变操作区间内的元素个数,而是返回逻辑上的新终点。


    变序性算法

    变序性算法是,透过元素值的赋值和交换,改变元素序列,但不改变元素值.


    排序算法

    排序算法是一种特殊的变序性算法,但比一般的变序性算法更加复杂.


    已序区间算法

    已序区间算法,是指其所作用的区间在某种排序准则下已序。


    数值算法

    数值算法以不同方式组合数值元素

  • 相关阅读:
    JVM
    SpringDataES
    Lucene
    linux下如何实现mysql数据库每天自动备份定时备份
    java的finalize()函数
    Java代码优化(长期更新)
    HashMap实现原理及源码分析
    Java中的equals和hashCode方法详解
    java中JVM的原理
    Java程序员应该了解的10个设计原则
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468408.html
Copyright © 2011-2022 走看看