我們正在開發一個自定義List類。我們試圖實現迭代器和const_iterator及其函數,但是我們的++運算符有問題。 PostFix完全不起作用,並且當我們步入太遠時(當前代碼是一個只返回最後有效結果的解決方法),PreFix會給我們分段錯誤。 問題1:如何修復與前綴相關的段錯誤而無需返回上一個有效元素? (我們試過返回nullptr)。Iterator和const_iterator操作符++後置和前綴
即使我們已經按照互聯網上的每個指南<,Postfix也不會迭代。 <
問題2:PostFix爲什麼不起作用?
代碼交&前綴:
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;
}
Testcode(大氣壓下以後綴):
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.
鑑於postfix操作符返回舊值,您對clst = clst ++;(除了未定義的行爲)有什麼期待? – molbdnilo