《C++面向对象程序设计》课程笔记 lessen9 算法

1. STL 算法分类

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

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

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

  • 用 “==” 判断元素是否相等,或用 “<” 来比较大小
  • 多出一个类型参数 “Pred” 和函数形参 “Pred op”:通过表达式判断 “op(x,y)” 的返回值:true/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

猜你喜欢

转载自blog.csdn.net/sinat_35483329/article/details/85642738