2013-03-06 3 views
-3

벡터의 vector을 정의해야하는 코드가 있습니다. 내가 때마다 채울 루프 광고에서 사용, 코드 조각은 다음과 같습니다벡터 요소의 벡터 지우기

vector < vector<T> > buckets; 

for (i = 0 -> N) { 
    buckets.clear(); 
    .... 
} 

내 질문에 내가 이전 값이 존재하는 볼도 다음 반복에, bucket.clear() 작업을 수행 한 후,이 보통이다?

미리 감사드립니다.

+2

어떻게 그 값을 보는지 보여주십시오. – Zeta

+4

'for (i = 0 -> N)'이 유효하지 않습니다. C++ –

+2

실제 코드를 표시해야합니다. – stefan

답변

2

clear은 "사용 된 항목 수를 0으로 설정합니다"[1], 따라서 오래된 항목을 벡터에서 읽을 수 있습니다. 새 크기를 얻기 위해 size()을 사용하지 않으면 다른 값을 얻지 만 값은 그대로 유지됩니다.

clear은 실제로 내용을 완전히 제거 할 수 있으며 더 이상 액세스 할 수 없습니다. 어떤 경우에 콘텐츠를 사용하려고하면 프로그램이 중단됩니다.

[1] 네가 세부 사항을 원한다면 네가 "more"를한다. 나는 그것을 단순화하고있다. 예를 들어 소멸자에게 벡터의 요소를 호출하지만, 여전히 "물건은 여전히있을 것"의 사례이며 더 이상 유효한 것으로 간주되지 않습니다.

+0

"값은 여전히 ​​존재"보다는 "값이 읽기 쉽다"를 선호합니다. 이것을 방지하기 위해 클래스가 소멸자의 멤버를 제로로 만드는 것은 드문 일이 아닙니다. –

+0

좋아요, 편집했습니다 ... –

+0

어떻게 물건을 아직 꺼내지 않았는지 알 수 있습니까? 나는 표준에서'clear()'가 호출 될 때 구현이 할당 된 메모리를 해제하는 것을 막을 수있는 것을 찾을 수 없다. 내가 놓친 게 있니? – us2012