find

  1. template<class Iterator, class T>
  2. Iterator find(Iterator begin, Iterator end, const T& val)
  3. {
  4. while(begin != end && *begin != val)
  5. {
  6. ++begin;
  7. }
  8. return begin;
  9. }

accumlate

必须要提供一个初始值的原因在于,一定得提供一个初始值init,这样当[first, last)为空区间时仍能获得一个明确的值。

  1. template <class InputIterator, class T>
  2. T accumlate(InputIterator first, InputIterator last, T init)
  3. {
  4. for(; first != last; ++first)
  5. init = init + *first;
  6. return init;
  7. }
  1. template <class InputIterator, class T, class BinaryOperation>
  2. T accumlate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op)
  3. {
  4. for(; first != last; ++first)
  5. init = binary_op(init, *first);
  6. return init;
  7. }