对于地址不连续的比如链表,链队之类的,结点与结点之间靠next指针连接(假设单链).
那么,从链首找到链中间某个元素需要一直沿next指针寻找,
麻烦在于编程不方便.

可否在形式上统一对连续空间和非连续空间的访问方式,
通过增加一个智能指针,记关键字smart,将结点的next指针用smart标记
比如链表:
typedef struct LNode
{
   ElemType data;
   smart   struct LNode * next;
}LNode, *LinkList;

LinkList L;
smart  p = L ;
//初始化
//各项链表操作

p = p+i ; //访问第i个结点
这样不用通过while(p->next != NULL) {p= p->next;}
访问方式及其简便,就像访问连续地址的数组一样,这不是很好吗?

当然, 运行时本质上仍然不能直接访问,我想做到的只是,编程简单方便,无可厚非.

大家不要抱着一个"不存在就是不合理的"想法,希望可以共同探讨.
posted on 2006-12-22 12:49 哈哈 阅读(833) 评论(6)  编辑 收藏 引用

评论:
# re: C++是否可以考虑增加智能指针 2006-12-22 13:15 | Francis Arcanum
STL里的iterator就是这个东西么  回复  更多评论
  
# re: C++是否可以考虑增加智能指针 2006-12-22 14:26 | LOGOS
Francis Arcanum说的没错。

此外,智能指针并不是你所说的这个概念  回复  更多评论
  
# re: C++是否可以考虑增加智能指针 2006-12-22 15:21 | 小山日志
不知道你是不是已经知道STL中的iterator了,它被划分成五类,输入,输出,前向,双向和随机的。
因为链表不能提供随机访问,所以stl中链表迭代器(iterator)不支持你想要的这种形式:
p = p+i ; //访问第i个结点
而是一个双向迭代器,你可以这样:p++或者p--访问到你需要的节点。
不过stl算法中有一个advance函数,你可以这样使用:
advance(p, i);
C++只是没有把作为表达式重载来设计,需要的话你可以自己来这样做。^_^  回复  更多评论
  
# re: C++是否可以考虑增加智能指针 2006-12-22 15:24 | 小山日志
如LOGOS所说,智能指针更大的用处应当是资源管理,而不只是提供语法糖。
你可以参看scott的一些文章,而BOOST中有几个设计良好的,被纳入tr1的智能指针。  回复  更多评论
  
# re: C++是否可以考虑增加智能指针 2006-12-22 16:26 | 空明流转
iterator。已经有这个选择了。另外楼上说的没有错,任何一个编译器机制都不是语法糖。不过至于boost的smart pointer,我觉得loki更加好一点。  回复  更多评论
  
# re: C++是否可以考虑增加智能指针[未登录] 2009-10-10 23:52 | Primer
这叫智能指针?  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理