Iterators in a std::forward_list
can become invalidated under certain circumstances:
Any operation that modifies the list, such as insert_after()
, emplace_after()
, erase_after()
, push_front()
, emplace_front()
, pop_front()
, or clear()
, invalidates iterators pointing to the elements following the modified element.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> list{1, 2, 3, 4};
auto it = list.begin();
++it; // points to 2
list.insert_after(it, 5); // 'it' invalidated
std::cout << *it; // undefined behavior
}
If the internal memory of the forward_list
is reallocated (e.g., due to a call to resize()
), all iterators are invalidated.
To avoid issues, it's best to re-obtain iterators after performing any modifying operation on the forward_list
.
Answers to questions are automatically generated and may not have been reviewed.
std::forward_list
This lesson provides an in-depth exploration of std::forward_list
, covering creation, management, and advanced list operations