一、迭代器的概念

  1. 设计目标:提供一种顺序访问聚合对象的元素而不暴露其底层表示的方法
  2. 迭代器的使用方式应尽量与指针贴近,包括通过运算符重载实现 ++*->
// 定义 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;