一般我们在定义链表的时候都会有一个指向下一个元素的指针(next),在想要移动某个指针的时候,我们会使用类似下面的语句:
p=p->next;//这里的p是链表节点的指针
但是,我们能不能使用p++这样的语句来使指针p指向下面一个节点呢?
答案是不能,C++编译器能实现的是对于p+1的操作,能根据指针p的类型来自动的调整每次移动的步伐,指针p为int整,则向后移动4个字节,若指针p为char型,则每次移动1个字节。但是,由于我们操作的是链表的指针,虽然p+1能够实现向后移动每个链表节点的大小个字节,但是此时指针p指向的位置与我们使用new分配的位置不一定相同,当然,当我们取出指针的内容时,也就不能得到我们想要的数据了。
这种方法是仿照STL的iterator:
下面是我定义的链表节点的结构体
struct Node{
int data;
Node * next;
}
template<class T>
struct iterator
{
iterator(T * ptr=NULL):point(ptr)
{
};
iterator & operator ++(int)
{
iterator node(point);
point =node->next;
return node;
}
T * operator ->()
{
return point;
}
T & operator *()
{
return *point;
}
protected:
T * point;
};
只需要在把模板特化为Node结构体即可实现指针p++操作。