码迷,mamicode.com
首页 > 编程语言 > 详细

C++ STL算法

时间:2020-01-20 12:53:03      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:条件   形参   功能   false   头文件   删除   作用   rem   完成   

1、简介

  在 STL 中,算法就是函数模板。STL 中的算法大多数是用来对容器进行操作的,如排序、 查找等。大部分算法都是在头文件 <algorithm> 中定义的,还有些算法用于数值处理,定义在头文件 <numeric> 中。
  STL 提供能在各种容器中通用的算法(大约有70种),如插入、删除、查找、排序等。算法就是函数模板。算法通过迭代器来操纵容器中的元素。
  许多算法操作的是容器上的一个区间(也可以是整个容器),因此需要两个参数,一个是区间起点元素的迭代器,另一个是区间终点元素的后面一个元素的迭代器。例如,排序和查找算法都需要这两个参数来指明待排序或待查找的区间。有的算法返回一个迭代器。例如,find 算法在容器中查找一个元素,并返回一个指向该元素的迭代器。算法可以处理容器,也可以处理普通的数组。

2、分类

2.1 不变序列算法

变值算法
删除算法
变序算法
排序算法
有序区间算法
数值算法
accumulate

2.2 改变其所作用的容器的算法

  copy:将一个容器的内容复制到另一个容器。

  remove:在容器中删除一个元素。
  random_shuffle:随机打乱容器中的元素。
  fill:用某个值填充容器。

2.3 不会改变其所作用的容器的算法

  find:在容器中查找元素。
  count_if:统计容器中符合某种条件的元素的个数。

find 算法和其他算法一样都是函数模板。find 模板的原型如下:
  template <class InIt, class T>
  InIt find(InIt first, InIt last, const T& val);
其功能可以是在迭代器 first、last 指定的容器的一个区间 [first, last) 中,按顺序查找和 val 相等的元素。如果找到,就返回该元素的迭代器;如果找不到,就返回 last。[first, last) 这个区间是一个左闭右开的区间,即 last 指向的元素其实不在此区间内
  “其功能可以是”:因为模板只是一种代码形式,这种代码形式具体能完成什么功能,取决于程序员对该模板写法的了解及其想象力。按照语法,调用 find 模板时,first 和 last 只要类型相同就可以,不一定必须是迭代器。
  find 模板使用==运算符判断元素是否相等。因此,如果 [first, last) 区间中存放的是对象,则==运算符应该被适当重载,使得两个对象可以用==运算符比较。STL 中还有一个常用的算法 sort,用于对容器排序,其原型为:

  template<class_RandIt>
  void sort(_RandIt first, _RandIt last);
该算法可以用来对区间 [first, last) 从小到大进行排序。

  实际上,大多数重载的算法都有两个版本,其中一个用==判断元素是否相等,或用<比较大小;而另一个版本多出来一个类型参数 Pred 以及函数形参 Pred op,该版本通过表达式op(x, y)的返回值是 true 还是 false 来判断 x 是否“等于”y 或者“小于”y。

C++ STL算法

标签:条件   形参   功能   false   头文件   删除   作用   rem   完成   

原文地址:https://www.cnblogs.com/Sheenagh/p/12217202.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!