| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| #include <vector> |
| |
| void InvalidatesAllIterators() { |
| std::vector<int> v = {1, 2, 3}; |
| auto it1 = v.begin(); |
| auto it2 = v.begin() + 1; |
| auto it3 = v.begin() + 2; |
| |
| if (it1 == v.end() || it2 == v.end() || it3 == v.end()) { |
| return; |
| } |
| |
| // Invalidates all the iterators |
| v.clear(); |
| |
| // All these are invalid |
| *it1 = 1; |
| *it2 = 2; |
| *it3 = 3; |
| } |
| |
| void IteratorsStayValid() { |
| std::vector<int> v = {1, 2, 3}; |
| auto it1 = v.begin(); |
| auto it2 = v.begin() + 1; |
| auto it3 = v.begin() + 2; |
| |
| if (it1 == v.end() || it2 == v.end() || it3 == v.end()) { |
| return; |
| } |
| |
| // All these are valid because we checked them |
| *it1 = 1; |
| *it2 = 2; |
| *it3 = 3; |
| } |