18C++复习.SLT算法

STL算法分类

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

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

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

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

如下面的有两个版本的min_element

    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://blog.csdn.net/sinat_33924041/article/details/83687062

posted @ 2022-03-11 01:15  底层逻辑  阅读(194)  评论(0)    收藏  举报