2009-12-29 4 views
1

http://www.cppreference.com/wiki/stl/deque/insert을 참조로 특정 위치에서 값을 양키 (deque)에 삽입했습니다. 예를 들어stl :: deque의 삽입 (loc, val) - deque와 다른 위치의 끝에서의 일관되지 않은 동작?

, 양단 A가 인 경우 :

a, b, d, e, g 

반복자 D 가리키는 내가 수와 :

A.insert(iter, c); // insert val c before loc iter 
//deque is now a, b, c, d, e, g 

및 ITER 여전히 D 포인트한다. 그러나, g에 ITER 점은, 마지막 요소 때

A.insert(iter, f); 
//deque is now a, b, c, d, e, f, g 

하지만 ITER 이제 F 가리키는!

나의 현재 해결 방법은 다음과 같습니다

iter = A.insert(loc, val); // point iterator to element that was inserted before loc 
iter++;      // point iter back to loc 

내가 다시 테스트 또는 아무것도하지 않은, 일관성의) 단지 (삽입을 발견, 아래로 버그를 추적 너무 많은 시간을 보낸 것이 짜증나 행동, stl에서 모두 장소.

왜 다른 위치와 비교해도 결국 insert()가 다르게 동작합니까? 아니면 제가 잘못한 것입니까?

답변

7

삽입을 수행하면 기존의 모든 반복기가 무효화되므로 이전 반복기를 재사용하여 예기치 않은 동작 (크래시)이 발생합니다.

해결 방법이 올바른 해결책입니다.

편집 : 두 번째 질문에 대해서는 if (*iter == 'g') 뒤에 중괄호가 누락되었습니다. 앞으로도 새로운 질문을 올리시기 바랍니다.

+0

23.2.1.3 표준에서 궁금한 사람. – GManNickG

+1

다른 작업에는 어떤 것이 있습니까? 삽입, 지우기, 팝, 밀어 넣기, 크기 조절과 같이 양면 페이지의 크기()를 변경하는 것은 무엇입니까? 루프의 어딘가에서 요소를 변경하는 것은 어떨까요? * iter = 'z'; – Kache

+0

컨테이너마다 다릅니다. 'deque'의 경우, 시퀀스 중간에 삽입이나 삭제가 있으면 기존의 모든 반복자가 무효화됩니다. 끝에서 추가 또는 제거하지 않습니다. 또한 시퀀스 중간에서 많은 삽입 작업을 수행하는 경우 'deque'대신 'list'를 사용하는 것이 더 나을 것입니다. – coppro