3 인수 양식 list::splice()
은 하나의 요소를 한 목록에서 다른 목록으로 이동합니다. SGI's documentation은 이동중인 요소를 가리키는 모든 이터레이터 이 유효 함을 명시 적으로 나타냅니다.은 유효합니다. Roguewave's documentation은 splice()
메서드의 반복자 무효화 속성에 대해서는 아무 말도하지 않는 반면 C++ 표준에서는 모든 반복자와 연결되는 요소에 대한 참조를 무효화한다고 명시 적으로 명시하고 있습니다.std :: list 및 iterator invalidation에서 splice()
실제로 SGI에서 정의한대로 splicing()이 작동하지만 디버그/보안 SCL 버전의 Microsoft의 STL 구현 (엄격히 표준의 문자를 따름)에서 어설 션 오류 (잘못된 반복자 참조 취소)가 발생합니다.
목록을 가리키는 반복자의 유효성을 유지하면서 목록간에 요소를 이동하려는 경우 정확하게 목록을 사용하고 있습니다. 이 표준은 원래 SGI의 사양에 매우 도움이되지 않는 변화를 가져 왔습니다.
이 문제를 해결하려면 어떻게해야합니까? 아니면 그냥 실용적이고 스플 라이스가 내 머리를 모래에 집어 넣어야합니까? (이 아니기 때문에은 실제로 반복자를 무효화합니다. 반복자 디버깅이 꺼지면 MS 구현에서조차도 안됩니다.)
큰 질문입니다. 마지막 단어는 무엇입니까? –
표준은 바보 같지만 오른쪽입니다. 표준 준수 프로그램에서 스플 라이스를 사용하지 마십시오. 아마도 C++ 1x가 상황을 수정했을 것입니다. 나는 체크하지 않았다. – zvrba
방금 확인했는데 변경되었습니다. 보유 된 표현은 LWG 결함 250 중 하나입니다. 예전 반복기는 유효하며 새 컨테이너를 가리키는 것처럼 동작합니다. –