Когда вы вставляете новый элемент в vector
, любые итераторы для элементов после позиции вставки становятся недействительными, и если происходит перераспределение, все итераторы в контейнере становятся недействительными.Перераспределение происходит каждый раз, когда v.capacity() - v.size()
меньше, чем количество элементов, которые вы пытаетесь вставить.
Когда итератор признан недействительным, это означает, что итератор больше не может использоваться.Это неверно.
Эта перегрузка insert
возвращает новый итератор для вставленного элемента, поэтому вы можете заменить это:
nums.insert(it, 100500);
следующим:
it = nums.insert(it, 100500);
Правила, при которых итераторы становятся недействительными, различны для каждого контейнера, и вы должны внимательно их понимать.Одной из лучших ссылок на STL является документация SGI STL .Правила аннулирования итераторов обычно перечислены в сноске на каждой странице документации контейнера.
Обратите внимание, что документация SGI STL не является официальной документацией для стандартной библиотеки C ++ и есть некоторые тонкие различия, но обычно ониразличия не особенно важны;Следует отметить, что некоторые части SGI STL не включены в стандартную библиотеку C ++, а некоторые части стандартной библиотеки C ++ не являются частью SGI STL.