[英]Iterator trouble in a circular doubly linked list
对于一项作业,我将构建一个循环双向链接列表。 每当我尝试打印出列表时,它总是将最后一个元素排除在外,我不知道为什么。 据我对迭代器的了解,一切都应该正常工作,但是正在打印中,因此我的列表打印得很短。
这是主要的:
int main(void)
{
cdll mycdll(3,'X');
cout << "mycdll: " << mycdll << endl;
cout << mycdll << endl;
return EXIT_SUCCESS;
}
使用以下方法创建对象:
cdll::cdll(size_t n_elements, datatype datum)
:m_size(0), head(nullptr), tail(nullptr)
{
if(n_elements <= 0)
throw out_of_range("Empty cdll");
for(size_t i = 0; i < n_elements; ++i)
push_front(datum);
}
这是我打印的位置:
ostream& operator<<(ostream& sout, const cdll& x)
{
cdll::iterator p = x.begin(); // gets x.h
sout << "(";
while(p != x.end())
{
sout << *p;
if(p->next != x.end())
sout << ",";
++p; // advances iterator using next
}
sout << ")\n";
return sout;
}
如果有帮助,这是pushBack()
void cdll::push_front(datatype datum)
{
node* temp = new node(datum, tail, head);
m_size++;
if (!empty())
{ // was a nonempty cdll
head->prev = temp;
tail->next = temp;
head = temp;
}
else
{
head = tail = temp;
}
}
我得到的输出是mycdll(X,X,)
,我期望mycdll(X,X,X)
。 我在print()
的迭代器做错了。 有任何想法吗?
假设您的end()返回tail,请执行{} while(); 而不是while(); 应该解决问题。
否则,您将始终错过最后一个项目,因为while()条件将在尾部失败,且p指向该项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.