From 26563e69bcba79916d1fbea46c9fce8e622c8fb5 Mon Sep 17 00:00:00 2001 From: Davide Depau Date: Sun, 7 Mar 2021 14:21:56 +0100 Subject: [PATCH] Make LinkedList iterator safe against removal of cur item --- src/StringArray.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/StringArray.h b/src/StringArray.h index 4c0aa70..74cca4b 100644 --- a/src/StringArray.h +++ b/src/StringArray.h @@ -47,10 +47,19 @@ class LinkedList { class Iterator { ItemType* _node; + ItemType* _nextNode = nullptr; public: - Iterator(ItemType* current = nullptr) : _node(current) {} - Iterator(const Iterator& i) : _node(i._node) {} - Iterator& operator ++() { _node = _node->next; return *this; } + Iterator(ItemType* current = nullptr) : _node(current) { + _nextNode = _node != nullptr ? _node->next : nullptr; + } + Iterator(const Iterator& i) : _node(i._node) { + _nextNode = _node != nullptr ? _node->next : nullptr; + } + Iterator& operator ++() { + _node = _nextNode; + _nextNode = _node != nullptr ? _node->next : nullptr; + return *this; + } bool operator != (const Iterator& i) const { return _node != i._node; } const T& operator * () const { return _node->value(); } const T* operator -> () const { return &_node->value(); }