求高手答疑! C++ STL 中list是双向循环链表中循环可以实现什么功能?

我看到说C++STL中list是双向循环链表,双向我可以理解,有两个指针域,指向前一结点和指向后一结点,双向可以实现从末尾结点到头结点的遍历,但循环实现什么功能?#inc... 我看到说C++ STL 中list是双向循环链表,双向我可以理解,有两个指针域,指向前一结点和指向后一结点,双向可以实现从末尾结点到头结点的遍历,但循环实现什么功能?
#include<list>
#include<iostream>
int main()
{
list<int> ilist;
for(int i=0;i<5;++i)
ilist.push_back(i);
list<int>::iterator it=ilist.end();
cout<<*(--it);//输出4
cout<<*(++it);//若为循环链表,不是应该回到头结点吗?实际输出错误!
//若为循环链表,那end()是指向哪里?
return 0;}
展开
 我来答
snake3342
推荐于2018-04-13
知道答主
回答量:39
采纳率:0%
帮助的人:26.4万
展开全部
链表的内存结构是循环的,每一个节点(node)结构,node结构包含一个指向之前节点的指针,另外一个指向之后的节点,以及一个数据元素(你这里是int)——所以一个node结构自己是不知道自己是list中的第几个(没有储存相应的信息)。
但是,最末一个node,它的后指针是指向链表的终结记号,然后终结记号的node也有一个指针,才指向list的第一个node。所以你++it指向的是终结记号,上面是没有数据的,当然输出错误。
说双向的意思是:你可以在首端加入新的数据node,也可以在末端加入新的数据node,但不表示你可以无限循环的遍历它。
另外,List模板,不建议你使用iterator(迭代器),因为每一个node都不知道自己是第几个node,如果你使用迭代器指定你要访问第n个node的数据,它总是从首元素开始一个个数到第n,然后才返回数据给你。最好把链表当作动态的栈来使用,只访问或者增删头端或者尾端的数据,这样速度快。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式