用代码试着实现一个迭代器
//泛型编程 把类型抽象化
template <typename T>
class Iterator
{
public:
//实现构造 前++ 后++ 前-- 后--
//重载解引用*符 -> == !=
//这里不能加const const类型指针不能用来初始化无常类型的指针
Iterator(T *ptr == nullptr):ptr(ptr){}
//前++ 前++返回的是左值所以需要加引用
Iterator& operator++(void)
{
++ptr;
return *this;
}
//后++返回的是右值 为了防止与上面的重载++产生歧义使用哑元
Iterator operator++(int)
{
Iterator tmp(ptr); //先使用ptr拷贝构造一个迭代器类型 返回它
++ptr;
return tmp;
}
//前--
Iterator& operator--(void)
{
--ptr;
return *this;
}
//后--
Iterator operator--(int)
{
Iterator tmp(ptr);
--ptr;
return tmp;
}
//直接使用*it取到ptr指向的内存空间的数据
Iterator& operator*(void)
{
return *ptr;
}
//可以直接使用it->访问结构体成员
Iterator* operator->(void)
{
return ptr;
}
Iterator operator+(const int& n) const
{
return Iterator(ptr + n);
}
Iterator operator-(const int& n) const
{
return Iterator(ptr - n);
}
bool operator==(const Iterator& it) const
{
return ptr == it.ptr;
}
bool operator!=(const Iterator& it) const
{
return !(ptr == it.ptr);
}
private:
T* ptr;
};