迭代器是一种抽象的设计概念,提供一种方法,使之能够依序寻访某个容器内的元素。在 STL 中是扮演算法和容器之间的胶合剂作用。
// find 函数接收两个迭代器和一个目标
template <class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, const T& value) {
while(first != last && *first != value) first++;
return first;
}
迭代器是一种 smart pointer// auto_ptr 简化版实现
template <class T>
class auto_ptr {
public:
explicit auto_ptr(T *p = 0):pointee(0) {}
template <class U>
auto_ptr(auto_ptr<U>& rhs):pointee(rhs.release()) {}
~auto_ptr() { delete pointee; }
T& operator *() const { return *pointee; } // derefference
T* operator ->() const { return pointee; }
private:
T *pointee;
};
迭代器的开发工作交给容器设计者,需要重载 operator ++/*
使用模板做参数,同时 dereference 迭代器指针可以自动推导调用相应容器的迭代器。
template <class T, T t>
void func_impl(I iter, T t) {
T tmp; // 自动类型推导
}
template < class I >
void func(I iter) { // 对外接口
func_impl(iter, *iter);
}