2011-10-15 4 views
1

STL 목록의 삽입 또는 제거 작업이 반복자를 무효화하지 않는다는 것을 알고 있습니다. 그러나 목록이 여전히 반복자 자체를 보존하는지 여부는 확실하지 않습니다.STL리스트 반복자의 포인터를 저장하는 것이 안전합니까?

그래서 목록 반복기의 포인터를 저장하고 나중에 사용할 수 있습니까? std::list 들어

+1

'std :: list'는 반복자 참조를 노출하지 않습니다. 일부 샘플 코드는 의미를 이해하기 쉽게 만듭니다. –

+0

알았어. begin() 또는 다른 메소드는 iterator의 복사본이 아니라 iterator의 복사본을 반환합니다. 로컬 변수에 대한 포인터를 저장하는 것이 안전하지 않기 때문에 가능하지 않습니다. 내가 맞습니까? – ljh131

+0

@ ljh131 포인터가이 로컬 변수가 생성 된 스택 프레임보다 오래있게하면 로컬 변수에 대한 포인터 저장이 안전하지 않습니다. 변수가 범위를 벗어나기 전에 포인터를 사용하지 않으면 OK입니다 (대부분의 경우에 특히 유용하지는 않습니다). –

답변

3

:

삽입 영향을받지 [23.2.2.3/1]

경우
반복자 모든 참고 문헌의 경우 삭제
,
만이있어서

반복기 및 지워진 요소에 대한 참조가 무효화됩니다 [23.2.2.3/3]

그래서 엘리먼트를 지우고 저장된 Iterator를 사용하지 않는 한 안전합니다.

+1

ljh131이 질문에서 iterator 포인터를 언급했다. 반복기 값의 사본을 저장해야한다고 언급해야합니다. –

관련 문제