Zastanawiam się, co jest powodem, dla którego std::list<>::splice
unieważnia Iteratory odnoszące się do podciągu łączonego w nowym kontenerze. Jest to dla mnie trochę nielogiczne, szczególnie w świetle standardowej specyfikacji std::container::swap
. Zgodnie ze standardem językowym std::container::swap
nie unieważnia żadnych iteratorów. Jest to całkowicie uzasadniona praktyczna specyfikacja. Jednakże, powiedziałbym, że std::list<>::splice
również skorzystałby w dużej mierze z zachowania zachowującego iteratory.std :: list <> :: splice unieważnia Iteratory. Racjonalne uzasadnienie?
Rozumiem, że mogą istnieć pewne czysto naukowe rozważania oparte na koncepcjach osiągalności iteratora, itp. Ale jednocześnie splice
jest specyficzną operacją, oznaczającą, że dostarczenie dostosowanej dla niej specyfikacji prawdopodobnie nie poważnie uszkodzić koncepcję projektu STL.
Co to było? Czy zabroniłoby to lub nadmiernie komplikować niektóre praktyczne implementacje std::list
, których nie potrafię rozpoznać?
możliwy duplikat [splice() na std :: list i iterator unieważnienie] (http://stackoverflow.com/questions/143156/splice-on-stdlist-and-iterator-invalidation) – jwismar