我很难理解为什么我的链表实现的打印输出方法不起作用。当链接列表的数字为1-5时,它会使用以下代码打印出0
void printList(List& source, bool forward)
{
if (forward)
{
ListItr start = ListItr(source.first());
while (!start.isPastEnd())
{
cout << start.retrieve() +" ";
start.moveForward();
}
}
else
{
ListItr end = ListItr(source.last());
while (!end.isPastBeginning())
{
cout << end.retrieve() + " ";
end.moveBackward();
}
}
cout << endl;
}
然而,在我过去的实现中,它运行得很好,我很困惑为什么,因为它们是相同的,只是有不同的可变位置。
void printList(List &source, bool forward){
ListItr itr;
if(forward)
{
itr = ListItr(source.first());
while(!itr.isPastEnd())
{
cout << itr.retrieve() << " ";
itr.moveForward();
}
}
else
{
itr = ListItr(source.last());
while(!itr.isPastBeginning())
{
cout << itr.retrieve() << " ";
itr.moveBackward();
}
}
cout << endl;
}
因为您试图将itr.retrieve()
和" "
的返回值相加,所以该值在ASCII中是32的小数。我的意思是,你的失败代码;
cout << start.retrieve() +" ";
您的工作代码;
cout << itr.retrieve() << " ";