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

Анализатор обнаружил инвалидацию итератора в range\-based for цикле\.

Пример:

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

Данный код аналогичен следующему:

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

Теперь видно, что при операции 'push\_back' может произойти инвалидация итераторов '\_\_begin' и '\_\_end', если произойдёт реаллокация памяти внутри вектора\.

Если необходимо модифицировать контейнер и одновременно читать из него значения, лучше воспользоваться функциями, которые возвращают новый итератор после модификации, или индексами в случае класса 'std::vector'\.

Дополнительные ссылки:

* [https://stackoverflow\.com/a/6442829](https://stackoverflow.com/questions/6438086/iterator-invalidation-rules/6442829) \- правила инвалидации итераторов для STL контейнеров\.