최근에 주로 C++로 작성된 프로젝트를 상속 했으므로 이번이 처음입니다. 벡터의 요소가 벡터의 begin()
및 end()
에 묶여있는 루프 내에서 벡터의 요소를 지우는 데 문제가 있을지 궁금합니다.루프 경계 무효화
은 여기 (기본적으로) 내가 어떻게 노력했는지 :
for (vector<double>::iterator i = distance.begin(); i < distance.end(); i++) {
for (vector<double>::iterator j = i + 1; j < distance.end(); j++) {
/* code to assemble *i, *j, and some other values, say *x & *y
(also iterators) assumed to be in the distance vector */
vector< vector<double >::iterator remove;
remove.push_back(i); remove.push_back(j);
remove.push_back(x); remove.push_back(y);
sort(remove.begin(), remove.end());
for (int r = remove.size() - 1; r >= 0; r--) {
distance.erase(remove.at(r));
}
}
}
나는 그것을 테스트하고있어,이 작업이 나타납니다. 그러나, 나는 우연 때문에 우연한 일이며,이 해결책은 사용되어서는 안된다. distance.end()
은 각 루프의 시작 부분에서 리셋 되나요? 아니면 C++이 초기 값으로 확인하나요?
반복자를 비교할 때 <를 사용하지 마십시오. 루프의 반복자를 비교하려면! =을 사용하십시오. –