Iterator 무효화


vector v(10, 1); 
vector::iterator p = v.begin(); 
cout << *p << endl; 
v.resize(20); 
cout << *p << endl;

이경우 기존 생성한 iterator는 무효화 된다. 실행시 마지막 라인에서 run-time error가 발생한다.
하지만 size를 줄이는 경우는 해당되지 않는다.

vector v(10, 1); 
vector::iterator p = v.begin(); 
cout << *p << endl; 
v.resize(5); 
cout << *p << endl;

이유는 container 재할당 시 크기가 클 경우 메모리를 재할당 하고 작을 경우 기존 메모리를 활용하는데, Iterator는 내부에 container의 메모리에 대한 pointer를 가지고 있기 때문에 resize()의하여 메모리를 재할당 할 경우 Iterator 무효화가 발생한다.



댓글

이 블로그의 인기 게시물

Raspberry pi 한글 설정 및 chromium 설치

Google Test를 이용한 Class의 Private/Protected Member Test