2013-06-17 3 views
0

STL 벡터 스왑 구조 (C + +를)

someVector.clear(); 
std::vector<int>().swap(someVector); 

someVector.clear(); 
std::vector<int> (someVector).swap(someVector); 

아니면이 같은 일을 수행 할 차이점은 무엇입니까?

편집 : 목표는 someVector와 관련된 메모리를 확보하는 것입니다.

+1

그들은 똑같이 무의미하거나 분명히하지 않았습니다. 뭐하고 싶어? –

답변

3

그들은 모두 벡터를 지우려고 시도하고 사용중인 저장소를 할당 해제하려고 시도하기 때문에 사례에서 차이가 없습니다. 단순히 clear()으로 전화하는 것만으로 보장 할 수는 없습니다. 벡터의 용량을 그대로 남겨 둘 수 있습니다.

첫 번째 경우 clear을 호출하는 것은 의미가 없습니다. 두 번째 줄은 벡터를 빈 것과 바꿔서 메모리를 할당 해제합니다.

두 번째 경우에도 메모리가 할당 취소된다는 보장은 없습니다. 벡터를 복사하면 용량이 보존 될 수도 있고 유지되지 않을 수도 있습니다.

을 수행하는 방법은 다음과 같습니다

std::vector<int>().swap(someVector); 

C++ 11에서, 당신은 다른 방법 clear()shrink_to_fit()를 호출 할 수 있습니다; 하지만 메모리를 해제 할 수도 없습니다.

0

첫 번째 것은 빈 벡터 (기본 생성자)를 만들고 someVector로 교체합니다. 두 번째 것은 someVector (복사 생성자)에서 벡터를 만들고 someVector로 교체합니다.