3 OOP vs GP
- OOP:Object-Oriented programming。类、继承关系、虚函数等等
- GP:Generic Programming
STL并不是基于OOP设计出来的,是基于GP设计出来的。
OOP是将数据和方法关联,而GP是分离¶
OOP是将数据和方法关联起来,而GP是分离
-
OOP企图将datas和methods关联在一起。如果用OOP的思想设计list,则会将sort函数放在类list中
-
GP是将datas和methods分开
哪种方式好?GP会更佳
- 容器和算法团队可各自闭门造车,双方用Iterator沟通即可
- 算法通过Iterators确定操作范围,并通过Iterators取容器的元素
- 容器可能要视需要重载<、>等操作符,让算法能够调用
附:为什么list不能用全局的::sort()
函数?¶
::sort
函数中会将指针(迭代器其实就是泛化指针)进行加、减、乘、除的操作- 要支持加、减、乘、除操作的迭代器,一定是
RandonAccessIterator
随机访问的迭代器 - 而list是链表,在内存中是一个一个节点串起来的。它的迭代器是不能跳来跳去的,只能是++、--一步一步走。即list的迭代器并不支持随机访问
所以算法对迭代器也有要求,并不是所有的迭代器都可以使用。
如果容器本身就有sort,用容器本身的sort即可。因为容器的sort是为该容器专门定制的,速度比::sort()
更快
附:所有的算法,内部最终涉及元素本身的操作,无非就是比大小¶
所有的算法,内部最终涉及元素本身的操作,就是比大小。
字符串比大小:
- 有一种字典形式的比大小:从第一位开始比,a最小,z最大,无论字符串长度。这是STL中String::Operator<的所使用的方法
- 可以用长度来比