侯捷STL 9. OOP 面向对象编程 vs GP 泛型编程

1. 基本介绍

  • gunc 2.9 用的 OOP 比较少,继承关系很少,所以比较易读
  • OOP: 数据和操作,放在同一个 class 里
    • 在标准库中如 list,list有 sort() 操作,sort() 是放在类内的
  • GP: 将数据和操作分开
    • vector 和 deque 内部就没有 sort(),sort() 在 algorithm 里
    • 利用全局函数来排序,就要用到迭代器,用 c.begin() 和 c.end() 告诉算法范围,就可以进行排序了

2. 采用GP的好处

  • 容器和算法可以分开闭门造車
  • 二者之间的关联就是迭代器 iterator
  • 为什么 list 不能采用泛型?
    • 源码中的最后 (first + (last - first)/2) 只有随机访问的迭代器才可以使用
    • 而链表的特性,他不是连续的内存,使它不能像数组一样,被随机访问
    • 这就是为什么之前测试sort() 的时候要用 list.sort() 因为全局的 sort() 无法使用,sort() 需要内部自己提供 sort()

3. 算法

  • 所有的算法,其内最终涉及的元素就是比大小
  • 这里提到的是 max
  • 在上方的程序中,第一次max,没有传入第三个参数,默认调用的是下方的第一种max
  • 而第二次传入了一个仿函数,调用的是下方的第二种max
  • 字符串的比较,采用的是a比b小的形式,所以最后,第一个max 输出 zoo
  • 而传入仿函数的,比较的是他们的 size,返回的就是长度较长的 hello
  • 仿函数的使用
    • return的时候,吧
    • 把三目运算符中前面a和b的比较,利用仿函数替代,让其判断a,b的大小,返回 true or false,所以这里仿函数的返回值是 bool
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值