实现链表指针的++操作符

一般我们在定义链表的时候都会有一个指向下一个元素的指针(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++操作。

 



 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值