2011-04-29 2 views
3

방금 ​​현지 대학에서 C++ 수업을 시작했으며 강사가 수업에 과제를 부여하여 벡터를 만들어 스택 중간에서 요소를 제거해야했습니다.스택에서 요소를 제거하는이 방법은 어떻게 작동합니까?

vect[3] = vect[vect.size()-1]; 
vect.pop_back(); 

지금 .. 내가 그것을 테스트했고 그것이 내가 어떻게 작동하는지 그냥 확실 해요 또는 작동 왜 작동합니다

그녀는이 예제를 제공했다. 누군가가 간단한 설명을 해줄 수있을 것이라고 확신합니까?

+1

예제는 스택 작업 (push 및 pop)만으로는 불가능합니다. 스택 중간에있는 요소를 지우려면 새 스택을 만들고 새 스택에 요소를 팝업하고 제거 할 요소를 팝업 한 다음 원본으로 다시 팝 어스해야합니다. – Jan

답변

5

벡터 중간에서 요소를 삭제하고 싶으므로 마지막 요소 (색인 size()-1)로 덮어 씁니다. 따라서 마지막 요소가 중복되어 있으므로 pop_back() 수 있습니다. 마지막으로 원하는 결과를 얻습니다. 벡터 크기가 1 씩 감소하고 이전 값인 vect[3]이 사라졌습니다. 이 벡터의 요소의 순서를 보존하지 않지만, 상대적으로 효율적이다

- 요소가 삭제되는 후 모든 요소 때문에 메모리 복사를 많이 포함 할 수있는 벡터의 중간에서 삭제 간격을 수용하기 위해 하나씩 이동해야합니다 (기억하십시오 : std::vector은 요소를 연속적인 저장 영역에 저장합니다). 끝에서 지우기는 거의 아무런 비용도 들지 않습니다.