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

  • 相关阅读:
    【Windows SDK学习】基础概念介绍
    ConcurrentHashMap终于安排上了--按半年统计用户访问量
    jpa执行原生sql返回自定义类型对象
    MySQL中按周、月、季、年分组统计(转)
    jpa+多表关联+动态拼接参数+分页查询
    RestTemplate(含官方文档)
    com.netflix.client.ClientException: Load balancer does not have available server for client: graph-app
    因为导错包, 我把JPQL换成了Querydsl, 我佛了
    继承WebMvcConfigurationSupport和实现WebMvcConfigurer区别
    使用 Cobbler 安装一台 CentOS 主机
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5655493.html
Copyright © 2011-2022 走看看