1。如何访问list的每个元素??情给一个例子.
2.有一段代码看不懂,是一个数组的翻转的代码如下:
/**************************************************
ilist 是自定义链表类,ilist_item是自定义链表元素类,
_at_front是ilist_item的指针定义为ilist_item *_at_front=0;
_at_end类同
***************************************************/
void ilist::reverse()
{
ilist_item *ptr=_at_front;
ilist_item *prve=0;
_at_front=_at_end;
_at_end=ptr;
while(ptr!=_at_front)
{
ilist_item *tem=ptr->next();//while部分看不懂
ptr->next(prev);
prev=ptr;
ptr=tem;
}
_at_front->next(prev);
}
望各位高手指点一下,小弟先谢谢拉!!
这是数据结构的问题啊,比较简单了。
不管访问list中的那个元素,都要从头部开始,一个节点一个节点的查找。
在while中的部分实际上就是从头节点开始,首先将其next节点作为临时节点保存起来,并将头节点的next指针设置为0(因为prve初始为0), 将这个头节点赋给prev,然后再将临时节点赋给ptr,这样再次到循环开始处,tem就会得到第三个节点的指针,那么如此往复,就完成了list的反转过程。
不知道我这么解释楼主是否理解了。
楼主应该多看看有关数据结构方面的著作。
遍历list:
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int> li;
for(int i = 0; i<10; i++)
li.push_back(i);
list<int>::iterator it;
for(it = li.begin(); it!=li.end(); it++)
cout<<*it<<" ";
return 0;
}
ilist_item *tem=ptr->next();//从链表头开始 一个节点一个节点查找,并赋给tem
ptr->next(prev);//把链表反转,如:第二个节点指向第一个节点
prev=ptr;//为while下一次把链表反转作准备,如:第三个节点指向第二个节点
ptr=tem;//取链表的第二个节点
多谢各位高手的帮助,小弟还有一个问题想请教:
用list删除数组ai[]={0,1,1,3,5,8,21,35,89,99}中奇数位置上的元素,要使用erase方法,我编了一个程序,但通不过,想问一下错在那里,该如何改正??
#include<iostream>
#include<list>
using namespace std;
void main()
{
int ai[]={0,1,1,2,3,5,8,13,21,55,89};
list<int>ilist(ia,ia+11);
list<int>::iterator iter=ilist.begin();
for(;iter!=ilist.end();)
{
ilist.erase(iter);
iter=list.begin()->next;
iter=iter->next;
}
}
#include<iostream>
#include<list>
using namespace std;
void main()
{
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
list<int>ilist(ia,ia+11);
list<int>::iterator iter=ilist.begin();
for (int i=0;i<6;i++)
{
ilist.erase(iter);
iter=ilist.begin();
}
}
避免修改操作与遍历操作交叉在一起,因为ilist.erase(iter);
使得跌代器实效
但是,你的代码经过调试,还是不行啊??