• 8、【C++ STL】算法


    一、STL算法分类

    STL中的算法大致可以分为以下七类:

    • 不变序列算法
    • 变值算法
    • 删除算法
    • 变序算法
    • 排序算法
    • 有序区间算法
    • 数值算法

    大多重载的算法都是有两个版本的

    • 用 “==” 判断元素是否相等, 或用 “<”来比较大小。
    • 多出一个类型参数 “Pred” 和函数形参 “Pred op” : 通过表达式 “op(x,y)” 的返回值: ture/false 来判断x是否 “等于”y,或者x是否 “小于”y。

    如下面的有两个版本的min_element

    1     iterator min_element(iterator first, iterator last);
    2     iterator min_element(iterator first, iterator last, Pred op);

    1、不变序列算法

    • 该类算法不会修改算法所作用的容器或对象
    • 适用于顺序容器和关联容器
    • 时间复杂度都是O(n)

    2、变值算法

    •  此类算法会修改源区间或目标区间元素的值
    • 值被修改的那个区间, 不可以是属于关联容器的

    3、删除算法

    • 删除一个容器里的某些元素
    • 删除 -- 不会使容器里的元素减少
      • 将所有应该被删除的元素看做空位子
      • 用留下的元素从后往前移, 依次去填空位子
      • 元素往前移后, 它原来的位置也就算是空位子
      • 也应由后面的留下的元素来填上
      • 最后, 没有被填上的空位子, 维持其原来的值不变
    • 删除算法不应作用于关联容器
    • 算法复杂度都是O(n)的

    4、变序算法

    • 变序算法改变容器中元素的顺序
    • 但是不改变元素的值
    • 变序算法不适用于关联容器
    • 算法复杂度都是O(n)的

    5、排序算法

    • 比前面的变序算法复杂度更高, 一般是O(nlog(n))
    • 排序算法需要随机访问迭代器的支持
    • 不适用于关联容器和list

     

    6、有序区间算法

    • 要求所操作的区间是已经从小到大排好序的
    • 需要随机访问迭代器的支持
    • 有序区间算法不能用于关联容器和list

  • 相关阅读:
    git相关指令
    深刻理解回调函数
    将本地项目托管到GitHub、码云、GitLab的步骤
    各种安装依赖、插件、创建项目的指令
    IOS MBProgressHUD的使用
    2012武汉华为机试题
    GTK+2 多线程模型
    bindtextdomain()/textdomain() 设置文本域目录及文本域文件
    在Linux下开发多语言软件: Hello GetText!
    转:getaddrinfo函数详解
  • 原文地址:https://www.cnblogs.com/Long-w/p/9830285.html
Copyright © 2020-2023  润新知