Итератор и оператор const_iterator ++ пост и префикс

Мы работаем над настраиваемым классом List. Мы пытаемся реализовать итератор и const_iterator и его функции, но у нас есть проблема с нашими операторами ++. PostFix вообще не работает, а PreFix дает нам segfault, когда мы заходим слишком далеко (текущий код — это обходной путь, который просто возвращает последний действительный результат).
Вопрос 1: Как мы можем исправить ошибку, связанную с префиксом, без возврата последнего действительного элемента? (мы попытались вернуть nullptr).

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;
}

Тест-код (атм с постфиксом):

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.

0

Решение

Попробуйте просто:

clst++;

вместо :

clst = clst++;

Последний сбрасывает clst к его первоначальному значению (как будто увеличение не произошло).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]