벡터에서 .reserve (items)를 사용하면 벡터는 필요한 항목 수를 추측 할 수있을만큼 충분한 메모리를 할당합니다.std :: vector :: clear()를 호출하면 std :: vector :: capacity()가 0으로 설정됩니까?
나중에 .clear()를 사용하면 벡터를 지우거나 이전 정의 된 예약을 저장합니까?
감사합니다.
벡터에서 .reserve (items)를 사용하면 벡터는 필요한 항목 수를 추측 할 수있을만큼 충분한 메모리를 할당합니다.std :: vector :: clear()를 호출하면 std :: vector :: capacity()가 0으로 설정됩니까?
나중에 .clear()를 사용하면 벡터를 지우거나 이전 정의 된 예약을 저장합니까?
감사합니다.
std::vector<T>::clear()
이 크기에 영향을줍니다. 용량에 영향을주지 않을 수도 있습니다. 용량을 재설정를 들어, 스왑 트릭를 사용
std::vector<int> v1;
// somehow increase capacity
std::vector<int>().swap(v1);
참고 :이 오래된 대답은 여전히 (따라서 사람들이 그것을 읽고) upvotes을 받고 있기 때문에, 그 C를 추가 할 필요를 느끼지 ++ 11에는 벡터가 사용되지 않는 용량을 제거하도록 요청하는 std::vector<...>::shrink_to_fit()
이 추가되었습니다.
http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Clear-and-minimize 비슷한 "수축을 피하십시오"의 용량을 줄이기 위해 그렇게 생각하지 않아도됩니다. 요소의 실제 수 (존재하는 경우)에 벡터. –
용량에 영향을 줄 수도 있습니다. 용량을 변경하거나 재 할당하는 것을 피하기 위해 표준에 의해 요구되는 것은 아니다 _. 따라서 아무런 보장이 없습니다. –
@underscore_d : 감사합니다. 이 문제를 해결하기 위해 대답을 변경했습니다. – sbi
기본 버퍼 크기에는 영향을 미치지 않습니다. 그래서 실제로 버퍼를 없애거나 작게 만들려면 this 같은 트릭을 사용해야합니다.
비헤이비어가 표준에서 지정되어 있다고는 생각되지 않지만 아마 예약 된 메모리를 해제하지는 않습니다.
편집 : 좋아, 단지 확인 표준은 사후 조건이라고 말한다 size() == 0
이 나는 예약 된 메모리에 보유하지 않는 vector
구현 건너하지 않은 있지만.
표준 및 "아마도"(나는 일반적으로 메모리가 남아있을 것으로 예상했다). 임베디드 시스템에서 저는 실제로 메모리를 해제하는 구현체를 발견했습니다. –
아니요. vector::capacity()
에 전화하여 시험해보십시오.
자세한 내용은 shrink_to_fit
입니다. 표준의 작업 초안 언급 :
비고 : shrink_to_fit 크기에 용량()을 줄이기 위해 구속력 요청 ()이다. [ 참고 : 요청은 에 대한 바인딩이며 구현 별 최적화에 대한 위도 허용입니다. -end 노트] 0 분명히 호출 (에
아니,이 설정되지 않습니다 준비 제도 이사회()) 각 요소의 소멸자를 호출하고 공의 크기의 컨테이너를 떠나, 벡터에서 제거하지만, 용량은 변경되지 않습니다.
구현시 변경되지 않은 채로 남아 있습니다 ._ Standard에서는이를 요구하지 않으므로 용량 및 할당은'clear()'에서 변경 될 수 있습니다. –
그건 속이다. http://stackoverflow.com/questions/586634/ – sbi
아니, 그 질문도 _mention_'clear()'하지 않습니다. "깨끗한"이라는 단어가 사용 된 유일한 위치는 "나에게 명확하지 않습니다 ..."로 시작하는 주석에 있습니다. – MSalters
[벡터가 통화량을 변경하여 용량을 변경하는 방법에 대한 표준은 무엇이라고 말합니까? ] (http://stackoverflow.com/questions/18467624/what-does-the-standard-say-about-how-calling-clear-on-a-vector-changes-the-capac) –