문제

함수 인수로서 나는 a를 얻는다 vector<double>& vec 알 수없는 길이와 값을 갖는 (출력 벡터, 따라서 정점이 없음). 이 벡터를 모든 세로와 함께 특정 길이 N으로 초기화하고 싶습니다.

이것은 작동합니다

vec.clear();
vec.resize( n, 0.0 );

그리고 이것은 또한 작동합니다 :

vec.resize( n );
vec.assign( n, 0.0 );

두 번째는 더 효율적입니까 (메모리 거래/할당이 관련되어 있지 않기 때문에)? 더 효율적인 방법이 있습니까?

도움이 되었습니까?

해결책

std::vector<double>(n).swap(vec);

그 후, VEC는 모든 값이 0.0 인 크기와 용량 N을 보장합니다.

아마도 C ++ 11 이후 더 관용적 인 방법은

vec.assign(n, 0.);
vec.shrink_to_fit();

두 번째 줄 선택 사항. 경우 어디에 vec 더 이상 시작합니다 n 전화 여부 shrink_to_fit 필요한 것보다 더 많은 기억을 유지하는 것과 재 할당을 수행하는 것 사이의 상충입니다.

다른 팁

std::vector<double>(n).swap(vec);

이것은 실제로 벡터를 압축하는 이점이 있습니다. (첫 번째 예에서는 clear() 벡터를 압축하는 것을 보장하지 않습니다.)

글쎄, 이것을하는 방법을 마무리합시다 :)

vec.swap(std::vector<double>(n));
std::vector<double>(n).swap(vec);
std::swap(vector<double>(n), vec);
std::swap(vec, vector<double>(n));

게시 한 코드 스 니펫 중 어느 것도 메모리 거래를하지 않으므로 거의 동일합니다.

다른 모든 사람들이 계속 게시하는 스왑 트릭은 벡터가 원래 사용하는 메모리를 처리하기 때문에 실행하는 데 시간이 오래 걸립니다. 이것은 바람직하거나 바람직하지 않을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top