﻿# V789\. Iterators for the container, used in the range\-based for loop, become invalid upon a function call\.

The analyzer has detected invalidation of an iterator in a range\-based 'for' loop\.

Consider the following example:

```cpp
std::vector<int> numbers;
for (int num : numbers)
{
  numbers.push_back(num * 2);
}
```

This code fragment does the same as this one:

```cpp
for (auto __begin = begin(numbers), __end = end(numbers); 
     __begin != __end; ++__begin) { 
  int num = *__begin; 
  numbers.push_back(num * 2);
}
```

With the code rewritten in that way, it becomes obvious that the iterators '\_\_begin' and '\_\_end' can be invalidated when executing the 'push\_back' function if memory is reallocated inside the vector\.

If you simultaneously need to modify the container and read values from it, it is better to use functions that return a new iterator after modification, or indexes in the case of the 'std::vector' class\.

References:

* [https://stackoverflow\.com/a/6442829](https://stackoverflow.com/questions/6438086/iterator-invalidation-rules/6442829) \- iterator invalidation rules for STL containers\.