STL - 迭代器

89 阅读1分钟

迭代器是一种抽象的设计概念,提供一种方法,使之能够依序寻访某个容器内的元素。在 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);
}