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
-