カスタム List クラスに取り組んでいます。iterator と const_iterator とその関数を実装しようとしていますが、++ 演算子に問題があります。PostFix はまったく機能せず、PreFix は、踏み込みすぎると segfault を返します (現在のコードは、最後の有効な結果を返すだけの回避策です)。質問 1: 最後の有効な要素を返さずに、プレフィックスに関連するセグメンテーション違反を修正するにはどうすればよいですか? (nullptr を返そうとしました)。
インターネット上のすべてのガイドに従っているにもかかわらず、Postfix は反復しません <.<
質問 2: PostFix が機能しないのはなぜですか?
接頭辞のコード(&P):
List_const_iterator_& operator++()
{
if(ptr->next_ != nullptr)
{
ptr = ptr->next_;
return *this;
}
else
return *this;
}
List_const_iterator_ operator++(int unused)
{
List_const_iterator_ temp(*this);
if(ptr->next_ != nullptr)
{
ptr = ptr->next_;
return temp;
}
else
return *this;
}
テストコード (接尾辞付きの atm):
List<int> list1 {324, 2, 3};
List_const_iterator_<int> clst = list1.cbegin();
clst = clst++;
cout << "val: " << clst.ptr->data_ << endl;
clst = clst++;
cout << "val2: " << clst.ptr->data_ << endl;
clst = clst++;
cout << "val3: " << clst.ptr->data_ << endl;
後置の出力:
val: 324
val2: 324
val3: 324
プレフィックスの出力:
val: 2
val2: 3
val3: 3 <-- This is where we segfault if we don't use the controll.