
以distance函数为例:
- 对于random_access_iterator:直接进行迭代器运算
- 对于input_iterator:不断进行++操作
- 编译器通过重载的参数判断该调用哪个版本
iterator_category和type traits对算法的影响
以copy函数为例

- 函数模板通过对特定模板参数进行重载来实现特化
- copy通过一系列的类型检测和重载来对特定版本的调用进行性能优化
以destroy函数为例

算法源码中对iterator_category的“暗示”

- 算法虽然没有强制要求只能传入某些迭代器,但它们在形参中“暗示”了只能接受某些迭代器