std ::list<> ::splice делает недействительными итераторы. Обоснование?

Интересно, каково обоснование того, что std::list<>::spliceделает недействительными итераторы, которые ссылаются на подпоследовательность, вставляемую в новый контейнер. Мне это кажется нелогичным, особенно в свете спецификации стандарта std::container::swap. В соответствии со стандартом языка std::container::swapникакие итераторы не аннулируются. Это вполне разумная практическая спецификация. Однако я бы сказал, что std::list<>::spliceтакже сильно выиграет от сохранения поведения итератора -.

Я понимаю, что могут быть какие-то чисто академические соображения, основанные на понятиях итераторной достижимости и т. д. Но в то же время splice— этоstd::list-для конкретной операции, а это означает, что предоставление специальной -специальной спецификации для нее, вероятно, не нанесет серьезного концептуального ущерба дизайну STL в целом.

Так что же это было? Не запретит ли это или чрезмерно усложнит некоторые практические реализации std::list, которые я не могу распознать?

11
задан scottt 29 January 2019 в 12:19
поделиться