来自: 深入应用c++代码优化与工程级应用
一:自定义迭代器类型,
重载运算符*(解引用), !=(用于循环结束判断),
定义3个成员变量, 用cursor来判断循环结束而不是value=it.value的原因是可能循环浮点数时有误差
template<typename T>
class Iterator
{
public:
int cursor; //表示循环到第几下
T step; //表示步长
T value; //表示迭代器表示的值, 如begin为初始3, end为8
Iterator(int cursor_start, T begin_val, T step_val) :
cursor(cursor_start), value(begin_val), step(step_val)
{
if (cursor != 0)//对于begin, cursor为0, 即value不变
{
//对于end, cursor为最大循环次数,value=value+步长*次数
value += (step * cursor);
}
}
T operator*() const //指针解引用
{
return value;
}
//用cursor表示迭代器是否相等
bool operator!=(const Iterator &it) const
{
return cursor != it.cursor ;
}
Iterator &operator++()
{
value += step; //值+步长
++cursor; //cursor前移