Iterator Invalidation in std::forward_list

When do iterators become invalidated in a std::forward_list?

Iterators in a std::forward_list can become invalidated under certain circumstances:

Modifying Operations

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
}

Reallocation

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.

Linked Lists using std::forward_list

This lesson provides an in-depth exploration of std::forward_list, covering creation, management, and advanced list operations

Questions & Answers

Answers are generated by AI models and may not have been reviewed. Be mindful when running any code on your device.

Using splice_after() in std::forward_list
How can I transfer elements from one forward_list to another using splice_after()?
Removing Consecutive Duplicates in std::forward_list
How can I remove consecutive duplicate elements from a forward_list?
Merging Sorted Lists in std::forward_list
How can I merge two sorted forward_list objects into one sorted list?
Using Lambda Expressions with remove_if() in std::forward_list
How can I use a lambda expression as the predicate for remove_if() in a forward_list?
Reversing Elements in std::forward_list
How can I reverse the order of elements in a forward_list?
Or Ask your Own Question
Get an immediate answer to your specific question using our AI assistant