STL中算法是基于迭代器来实现的。
有了容器中迭代器的实现(对operator*、operator++等的重载),STL中大部分算法实现就显得很简单了。
先看一例关于find算法的实现:
1 template <class InputIterator, class T> 2 InputIterator find(InputIterator first, InputIterator last, const T& value) { 3 // 直接利用iterator中的operator++、operator*、operator!=实现 4 // 默认使用class T的operator!= 5 while (first != last && *first != value) ++first; 6 return first; 7 } 8 9 template <class InputIterator, class Predicate> 10 InputIterator find_if(InputIterator first, InputIterator last, 11 Predicate pred) { 12 // 能接受一个仿函数 用来指定find的条件 13 while (first != last && !pred(*first)) ++first; 14 return first; 15 }