STL算法讲解.ppt

  1. 1、本文档共173页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STL算法讲解

STL算法 桂勋 guinh3@ 内容 1)算法概览 2)for_each算法 3)非变动性算法 4)变动性算法 5)移除性算法 6)变序性算法 7)排序性算法 8)已序区间算法 9)数值算法 算法概览 内容 1.1)简介 1.2)算法头文件 1.3)算法分门别类 1.4)辅助函数 1.1简介 为了处理容器内的元素,STL提供了一些标准算法,包括搜寻、排序、拷贝、重新排序、修改、数值运算等十分基本而普遍的算法。 算法并非容器类别的成员函数,而是一种搭配选代器使用的全局函数。这么做有一个如下优势: (1)所有算法只需实作出一份,就可以对所有容器运作,不必为每一种容器量身订制。 (2)算法甚至可以操作不同型别(types)之容器内的元素,也可以与用户定义的容器搭配。 (3)这个概念大幅降低了程序代码的体积,提高了程序库的能力和弹性。 1.1简介 所有STL算法都被设计用来处理一个或多个迭代器区间。第一个区间通常以起点和终点表示,至于其它区间,多数情况下你只需提供起点便足矣,其终点可自动以第一区间的元素数量推导出来; 调用者必须确保这些区间的有效性,也就是说起点和终点必须指向同一个容器,而且起点位置不得在终点之后,第二(及其它)区间必须有足够的空间; STL算法采用覆盖(overwrite)模式而非安插(insert)模式。所以调用者必须保证目标区间拥有足够的元素空间。当然,你也可以运用特殊的安插型迭代器将覆盖模式改变为安插模式。 1.1简介 为了提高灵活性和功效,某些STL算法允许使用者传递自定的操作,以便由STL算法调用之。这些操作既可以是一般函数,也可以是仿函数;如果其返回值是bool,便称为条件判断式(predicates)。你可以运用条件判断式完成以下工作: ●对于搜寻算法,你可以传递一个函数或仿函数,指定一个一元判断式作为搜寻准则。该一元判断式用来判断某元素是否符合条件。例如你可以搜寻第一个“小于50”的元素; ●对于排序算法,你可以传递一个函数或仿函数,指定一个二元判断式作为排序准则。该二元判断式用来比较两元素。例如你可以传递一个准则,让Person对象按姓氏排序; ●你可以传递一个一元判断式作为准则,判断是否应该对某元素施以某项运算,例如你可以令奇数值元素被移除; ●你可以为某个数值算法指定一个数值运算。例如你可以让通常用来求“总和 (sum)的accumulaLe()算法改为求取乘积。 (注意.判断式不应该在函数调用过程中改变其自身状态) 1.2算法头文件 要运用C++标准程序库的算法,首先必须包含头文件: #include algorithm 某些STL算法用于数值处理,因此有需要包含头文件: #include numeric 使用STL算法时,你经常需要用到仿函数及函数配接器,此时需要包括头文件: #include functional 1.3算法分门别类 ●非变动性算法(nonmodifying algorithms) ●变动性算法(modifying algorithms) ●移除性算法( removing algorithms) ●变序性算法(mutating algorithms) ●排序算法(sorting algorithms) ●己序区间算法(sorted range algorithms) ●数值算法(numeric algorithms) 1.3算法分门别类 为了让人顾名思义,STL设计者为算法命名时,引入两个特别的尾词: 1.尾诃_if 如果算法有两种形式,参数个数都相同: (1)第一形式的参数要求传递一个值, (2)第二形式的参数要求传递一个函数或仿函数,那么尾词_if就派上了用场。无尾词的那个要求传递数值,有尾词的那个要求传递函数或仿函数。 例如: (1)find() 用来搜寻具有某值的元素; (2)find_if()一个被当做搜寻准则的函数或仿函数,并搜寻第一个满足该准则的元素。 不过并非所有“要求传递仿函数”的算法都有尾词if。如果算法以额外参数 来接受这样的函数或仿函数,那么不同版本的算法就可以采用相同命名。 例如:当你以两个参数调用min_element(),该算法以 operator为比较准则,返回区间中的最小元素,但如果你传递第三参数,这个参数会被当做比较准则。 1.3算法分门别类 2.尾词-copy 这个尾词用来表示在此算法中,元素不光被操作.还会被复制到目标区间。 例如:reverse()将区间中的元素颠倒次序,而reverse_copy()则是逆序将元素复制到另一个区间。 1.4辅助函数

您可能关注的文档

文档评论(0)

33ggoup + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档