Здравствуйте, vi.k, Вы писали:
VK>Алгоритм действий примерно следующий: VK>iter = list.find() VK>if (iter != end()) {...} VK>list.insert(..) VK>if (iter == end()) {...}
VK>В последней строчке иногда (!) с очень разной периодичностью вылетает ошибка
VK>Что может быть?
Вот если честно — на что ты рассчитываешь при таком вопросе? Что тут одни телепаты?
Здравствуйте, Sni4ok, Вы писали:
S>insert у листа — не константная операция, тоесть итераторы после неё могут быть не валидны(в частности если iter до insert'а был end() -ом)
Это не так.
Здравствуйте, Bell, Вы писали:
S>>insert у листа — не константная операция, тоесть итераторы после неё могут быть не валидны(в частности если iter до insert'а был end() -ом) B>Это не так.
Здравствуйте, vi.k, Вы писали:
VK>Алгоритм действий примерно следующий: VK>iter = list.find() VK>if (iter != end()) {...} VK>list.insert(..) VK>if (iter == end()) {...}
VK>В последней строчке иногда (!) с очень разной периодичностью вылетает ошибка
VK>Что может быть?
Телепаты в отпуске...
если в
if (iter != end()) {...}
ничего не делаешь с iter и list — тогда multithreading
Здравствуйте, Bell, Вы писали:
B>Что тут одни телепаты?
Видимо, да. Сам немного удивлён, но я получил ответ на свой вопрос. Всем ответившим спасибо
Минимальный неработающий код, к сожалению, невозможен. Всё это происходит в моём классе, который использует и list, и map и т.д, и т.п.
+ multithreading. Ошибка вылетает через несколько часов стабильной работы. Что тут ещё подробнее скажешь?
Больше интересовало — правомерно ли использование итератора и end() после вставки. Поэтому реакция ответивших была самым лучшим ответом
Понял, что правомерно, так что ищу ошибку в другом месте.
Но, если можно, ещё вопрос:
не могу разобраться со splice. Правомерно ли после него использовать итератор, не участвовавший в splice?
Здравствуйте, vi.k, Вы писали:
VK>Но, если можно, ещё вопрос: VK>не могу разобраться со splice. Правомерно ли после него использовать итератор, не участвовавший в splice?
VK>void splice(iterator where, list& right, iterator first);
VK>В частности тот, который where.
Да, можно — ломаются только ссылки на элемент, участвующий в splice
23.2.2.4/7
...Invalidates only the iterators and references to the spliced element.