zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    多线程中的静态代理模式
    ARP报文
    静态链表代码
    顺序表中的思路
    数据结构与算法
    我是见鬼了吗?这是史上最邪恶的脚本!没有之一
    细说"回车"和"换行"的故事
    SVN版本控制系统搭建(结合http服务)
    cooike和session到底是个啥
    Python3中 if __name__=='__main__'是个什么意思
  • 原文地址:https://www.cnblogs.com/Long-w/p/9830285.html
Copyright © 2011-2022 走看看