벡터를 역순으로 반복하려고합니다. typedef를 사용하여 반복자를 "만들었습니다".
typedef std::vector<Object*>::iterator Cursor;
내 문제는이 함수가 벡터의 시작에 도달하면 충돌하는 것 같습니다. 다음 코드가 있습니다.
void InsertFunc(Cursor& it, Object& o) {
vec_.insert(it, o);
--it;
for (; it >= vec_.begin(); --it) {
if ((*it)->type() == Object::SomeType) {
do_something
} else {
do_something_else
}
}
std::cout << "Insertion succes!" << std::endl;
}
이미 테스트 해 보았고 함수가 벡터의 시작 부분에 도달했는지 확인했지만 프로그램이 종료되고 "Insertion succes!"이라는 메시지가 표시됩니다. 인쇄되지 않습니다. 왜 그런지 아세요?
insert
재배치 증가로 인해 요소가 메모리에서 이동되어야하는 경우 반복기가에 의해 잠재적으로 무효화됩니다 .
삽입 호출 자체에서 새롭고 유효한 반복기를 얻을 수 있습니다.
it = vec_.insert(it, o);
그리고 멀리 가십시오.
다음 줄 --it
은 새 요소가 이미 있는 경우 오류를 발생시킵니다 begin()
. 당신은 방금 시작을 지나서 반복했습니다. 솔직히 말해서이 함수의 논리를 완전히 다시 살펴 보겠습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다