Time: 0:00
Test a custom input to verify an edge case (e.g. empty lists, negative numbers, duplicates).
This bug belongs to the logic errors pattern
The wrong operator, an inverted condition, a formula the right way round but backwards.
What went wrong: Calling nums.erase(it) invalidates the iterator it and all subsequent iterators. Incrementing an invalidated iterator in the for-loop condition (++it) invokes undefined behavior and skips adjacent elements.
The fix: Assign the return value of erase to the iterator: it = nums.erase(it), and only increment ++it when no element was erased.
Remember: std::vector::erase returns the iterator following the removed element. Always capture its return value during loop erasure.
The pattern behind it: logic errors.
Paste this into any web page or blog post. Visitors fix the bug right there, in their browser.
<iframe src="https://trybughunt.com/embed/36c94d48-bfdf-40e3-aa88-36f73f446c01" title="Debugging challenge: Iterator invalidation in vector erase loop" width="100%" height="580" loading="lazy" style="border:1px solid #d4d4d8;border-radius:12px;max-width:760px"></iframe>
<p style="font-size:14px">Debugging challenge from <a href="https://trybughunt.com/challenges/36c94d48-bfdf-40e3-aa88-36f73f446c01">TryBugHunt</a></p>