跳转至

3 OOP vs GP

  1. OOP:Object-Oriented programming。类、继承关系、虚函数等等
  2. GP:Generic Programming

STL并不是基于OOP设计出来的,是基于GP设计出来的。

OOP是将数据和方法关联,而GP是分离

OOP是将数据和方法关联起来,而GP是分离

  1. OOP企图将datas和methods关联在一起。如果用OOP的思想设计list,则会将sort函数放在类list中

  2. GP是将datas和methods分开

哪种方式好?GP会更佳

  1. 容器和算法团队可各自闭门造车,双方用Iterator沟通即可
  2. 算法通过Iterators确定操作范围,并通过Iterators取容器的元素
  3. 容器可能要视需要重载<、>等操作符,让算法能够调用

附:为什么list不能用全局的::sort()函数?

  1. ::sort函数中会将指针(迭代器其实就是泛化指针)进行加、减、乘、除的操作
  2. 要支持加、减、乘、除操作的迭代器,一定是RandonAccessIterator随机访问的迭代器
  3. 而list是链表,在内存中是一个一个节点串起来的。它的迭代器是不能跳来跳去的,只能是++、--一步一步走。即list的迭代器并不支持随机访问

所以算法对迭代器也有要求,并不是所有的迭代器都可以使用。

如果容器本身就有sort,用容器本身的sort即可。因为容器的sort是为该容器专门定制的,速度比::sort()更快

附:所有的算法,内部最终涉及元素本身的操作,无非就是比大小

所有的算法,内部最终涉及元素本身的操作,就是比大小。

字符串比大小:

  1. 有一种字典形式的比大小:从第一位开始比,a最小,z最大,无论字符串长度。这是STL中String::Operator<的所使用的方法
  2. 可以用长度来比