[런타임에러] Expression: map/set iterator not incrementable
Posted 2008/08/16 16:58, Filed under: Code FactoryVC++8.0 이하의 버전에서는 vector 객체를 iterator로 순환하면서 vector 내의 아이템을 삭제할 때 아래와 같은 코드에 문제가 없었습니다.
std::vector<int> vt;
std::vector<int>::iterator it;
for(it=vt.begin();it<vt.end();it++){
if(조건){
vt.erase(it);
}
}
하지만 VC++8.0에서는 런타임시 오류가 발생합니다.
그래서 아래와 같이 코드를 바꿨습니다.
for(it=vt.begin();it<vt.end();){
if(조건){
it = vt.erase(it);
}
else{
it++;
}
}
vector::erase()는 반환값으로 삭제한 iterator의 다음 iterator를 반환합니다.
출처 : http://ani2life.egloos.com/3230570
std::vector<int> vt;
std::vector<int>::iterator it;
for(it=vt.begin();it<vt.end();it++){
if(조건){
vt.erase(it);
}
}
하지만 VC++8.0에서는 런타임시 오류가 발생합니다.
그래서 아래와 같이 코드를 바꿨습니다.
for(it=vt.begin();it<vt.end();){
if(조건){
it = vt.erase(it);
}
else{
it++;
}
}
vector::erase()는 반환값으로 삭제한 iterator의 다음 iterator를 반환합니다.
출처 : http://ani2life.egloos.com/3230570
Tag : 런타임에러
Response :
0 Trackback
,
0 Comment
