zoukankan      html  css  js  c++  java
  • 容器适配器、STL算法简介

    可以用某种顺序容器来实现

     (让已有的顺序容器以栈/队列的方式工作)

    1) stack: 头文件 <stack> 栈 -- 后进先出

    2) queue: 头文件 <queue> 队列 -- 先进先出

    3) priority_queue: 头文件 <queue> 优先级队列 -- 最高优先级元素总是第一个出列

    都有3个成员函数:

    • push: 添加一个元素;
    • top: 返回栈顶部或队头元素的引用
    • pop: 删除一个元素

    容器适配器上没有迭代器

    STL中各种排序, 查找, 变序等算法都不适合容器适配器

     

     priority_queue和 queue类似, 可以用vector和deque实现

    缺省情况下用vector实现 priority_queue 通常用堆排序技术实现, 保证最大的元 素总是在最前面

    • 执行pop操作时, 删除的是最大的元素
    • 执行top操作时, 返回的是最大元素的引用
    • 默认的元素比较器是 less<T>

    STL算法分类

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

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

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

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

    如下面的有两个版本的min_element

    • iterator min_element(iterator first, iterator last);
    • 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

     

    参考链接:

    https://www.coursera.org/learn/cpp-chengxu-sheji

  • 相关阅读:
    【C++】资源管理
    【Shell脚本】逐行处理文本文件
    【算法题】rand5()产生rand7()
    【Shell脚本】字符串处理
    Apple iOS产品硬件参数. 不及格的程序员
    与iPhone的差距! 不及格的程序员
    iPhone游戏 Mr.Karoshi"过劳死"通关. 不及格的程序员
    XCode V4 发布了, 苹果的却是个变态. 不及格的程序员
    何时readonly 字段不是 readonly 的?结果出呼你想象!!! 不及格的程序员
    object file format unrecognized, invalid, or unsuitable Command 不及格的程序员
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5655493.html
Copyright © 2011-2022 走看看