一、迭代器的概念
- 设计目标:提供一种顺序访问聚合对象的元素而不暴露其底层表示的方法
- 迭代器的使用方式应尽量与指针贴近,包括通过运算符重载实现
++
、 *
、 ->
等
// 定义 list 迭代器
template <class T>
class ListIter
{
private:
ListItem<T> *ptr;
public:
ListIter(ListItem<T> *p = 0): ptr(p) {}
ListIter<T>& operator++()
{
ptr = ptr->next();
return *this;
}
bool operator==(const ListIter& i) const
{
return ptr == i.ptr;
}
T& operator*()
{
return ptr->val();
}
T* operator->()
{
return &(**this);
}
// 定义 find 函数
template <class Iterator, class T>
Iterator find(Iterator first, Iterator last, const T& value)
{
while (first != last && *first != value) ++first;
return first;
}
// Usage
vector<int> vecTemp;
if(find(vecTemp.begin(), vecTemp.end(), 3) == vecTemp.end())
cout << "3 not found" << endl;