인수로 사용할 때 반복기를 내부로 늘리는 것이 안전합니까?

StackOverflow https://stackoverflow.com/questions/161166

  •  03-07-2019
  •  | 
  •  

문제

현재 세트에서 일련의 반복자를 지우려고 노력하고 있지만 std :: set :: rease (iterator)가 반복자 (다음 반복자)를 반환해야하지만 GCC의 표준 라이브러리가 깨진 것 같습니다. 그러나 GCC에서는 void를 반환합니다. (표준은 무엇입니까?)

어쨌든 나는 쓰고 싶다 :

myIter = mySet.erase(myIter);

그러나 GCC는 그것을 좋아하지 않습니다 ... 그래서 이것을 대신 쓰는 것이 안전합니까?

mySet.erase(myIter++);

편집 : 그리고 예, MySet.end ()에 대해 확인하고 있습니다.

도움이 되었습니까?

해결책

문제가 없습니다

mySet.erase(myIter++);

운영 순서는 잘 정의되어 있습니다. Myiter는 MyTempiter에 복사되고 Myiter가 증가하고 MyTempiter는 Erase 방법에 주어집니다.

그렉과 마크를 위해: 아니요, 운영자 ++가 전화 후 작업을 수행 할 수있는 방법은 없습니다. 정의에 따르면, Erase ()는 운영자 ++가 반환 된 후 호출됩니다.

다른 팁

먼저 표준을 다시 읽으면 Set :: Erase 메소드의 프로토 타입이 다음과 같습니다.

void erase(iterator position);

그러나, 요소를 지우는 것은 다른 요소의 반복자에 영향을 미치지 않기 때문에 STL의 연관 컨테이너는 "안정적"입니다. 이것은 다음 줄이 유효하다는 것을 의미합니다.

iterator to_erase = myIter++;
mySet.erase(to_erase);
// Now myIter is still on the next element
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top