課題として、循環型二重連結リストを作成することになっています。ただし、リストを印刷しようとすると、常に最後の要素が除外され、その理由がわかりません。イテレータについて私が理解していることから、すべてが機能しているはずですが、何かが印刷されているため、リストが短く印刷されています。
主なものは次のとおりです。
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()
。何か案は?