• STL学习笔记(算法概述)


    算法头文件

    要运用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方式传递。例如:

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

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

    int square(int elem)   //call by value
    {
        return elem * elem;
    }
    ...  
    transform(coll.begin(),coll.end()   //source range
                    coll.begin(),                 //destination range
                    square);                      //operation

    移除性算法

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

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

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

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

    变序性算法

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

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

    排序算法

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

    已序区间算法

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

    数值算法

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

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

  • 相关阅读:
    python之turtle画蚊香
    day08:多表查询
    day07:内置函数
    day06:基础查询
    day05:Navicat 图形化客户端的基本使用
    day04:MySQL数据库表的基本命令
    day03:MySQL数据库的使用
    day02:MySQL数据库的安装
    day01:数据库和SQL概述
    51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
  • 原文地址:https://www.cnblogs.com/runnyu/p/4842947.html
Copyright © 2020-2023  润新知