STL源码剖析 算法章节 算法总览

53 篇文章 1 订阅
这篇博客探讨了STL算法的泛型化特性,强调了如何通过抽象操作对象和迭代器来实现算法的通用性。内容涵盖迭代器的错误处理、仿函数在算法中的作用、数值算法的实现位置以及算法泛型化的概念。此外,还提醒用户注意算法的多种版本及其使用场景。
摘要由CSDN通过智能技术生成
  • (以 下 “质变”栏意指mutating,意思是 “会改变其操作对象之内容”) 

 

 

 

 

 其余注意事项

  • 将无效的迭代器传给某个算法,虽然是一种错误,却不保证能够在编译时期就
    被捕捉出来,因为所谓“迭代器类型”并不是真实的型别,它们只是function template
    的一种型别参数(type parameters)
  • 许多STL 算法不只支持一个版本.这一类算法的某个版本采用缺省运算行为
    另一个版本提供额外参数,接受外界传入一个仿函数(functor), 以便采用其他策略。例如 unique() 缺省情况下使用equality操作符来比较两个相邻元素,但如果这些元素的型别并未供应equality操作符,或如果用户希望定义自己的equaHty 操作符,便可以传一个仿函数(fimctor)给另一版本的 unique () 有些算法干脆将这样的两个版本分为两个不同名称的实体,附从的那个总是以作为尾词,例如 find_if (). 另一个例子是replace ( ) , 使用内建的equality操作符进行比对操作,replace_if()则以接收到的仿函数(functor)进行比对行为
  • 所有的数值(numeric)算法,包括 adjacent_dif ference () , accumulate (), inner_product () , partial_sum( ) 等等,都实现于 SGI <stl_numeric ,h> 之中,这是个内部文件,S T L 规定用户必须包含的是上层的〈numeric〉。其他STL 算法都实现于SGI的 <stl_algo.h>和<stl_algobase.h>文件中,也都是内部文件;欲使用这些算法,必须先包含上层相关头文件<algorithm>
  • 关键在于,只要把操作对象的型别加以抽象化,把操作对象的标示法和区间目标的移动行为抽象化,整个算法也就在一个抽象层面上工作了。整个过程称为算法的泛型化 (generalized), 简称泛化

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值