Когда я запускаю следующее, я пропускаю последние данные в списке и получаю предыдущие данные. Когда я добавляю счетчик и пытаюсь вычесть на 1, я сбой. Любая помощь по этому поводу будет высоко оценена.Функция конца итератора() не работает с арифметикой указателя
template <typename T>
Iterator<T> Iterator<T>::operator--()
{
ptr = ptr->backward;
return *this;
}
template <typename T>
Iterator<T> DoublyLinkedList<T>::end() const
{
Iterator<T> iObj;
iObj.ptr = this->last;
iObj.capacity = this->count;
return iObj;
}
int main() {
DoublyLinkedList<int> *d = new DoublyLinkedList<int>;
for (int i = 2; i <= 20; i += 2) {
d->insertLast(i);
}
//Get an Iterator which points at the end of the list
Iterator<int> iter = d->end();
--iter;
//Test that it does point to the first
checkTest("testIteratorsDecrement #1", 20, *iter);
//Test that our Iterator can move forward;
--iter;
checkTest("testIteratorsDecrement #2", 18, *iter);
//move it some more
for (int i = 0; i < 7; i++) {
--iter;
}
checkTest("testIteratorsDecrement #3", 4, *iter);
--iter;
checkTest("testIteratorsDecrement #4", 2, *iter);
delete d;
return 0;
}
Я пытаюсь это исправить, выполнив следующие действия, но он выходит из строя. count является защищенным int.
template <typename T>
Iterator<T> DoublyLinkedList<T>::end() const
{
Iterator<T> iObj;
iObj.ptr = this->last + (count -1);
iObj.capacity = this->count;
return iObj;
}
this-> last - 1, почему вы добавляете счет в адрес последнего элемента? – Hal
Что заставляет вас думать, что это одно? «end», условно, представляет собой один конец, возможно, это то, что вы видите. Более того, нам нужен воспроизводимый пример для работы с ним (что-то, что мы можем скомпилировать) – OMGtechy
Я добавил больше кода, но я как-то вывел неверную ссылку в списке на 1. Я надеялся, что добавление счетчика поставит меня дальше в конце. – HamHat