Причина ошибки сегментации заключается в том, что изменение размера контейнера, который вы перебираете в цикле в диапазоне for
l oop, является неопределенным поведением. Таким образом, l oop необходимо переписать.
Глядя на ваш код, вы все равно можете использовать ранжированный for
, но не изменять список. Следующий код кажется эквивалентным (но не протестирован):
int numExtra = 0;
for ( auto &i : list )
{
i.a[1] = 5;
if ( ! (i.a[0] % 10) )
++numExtra;
iteration++;
}
for (int i = 0; i < numExtra; ++i)
list.push_back( (myType){ 7, 7 } );
Поскольку значение, добавляемое в список, является тем же значением, код просто подсчитывает количество возможных push_back
вызовов, которые будут быть вызванным. После завершения начального l oop мы просто вызываем push_back
всего numExtra
раз.