(RE) 초기 값으로 벡터를 특정 길이로 초기화합니다.
-
05-07-2019 - |
문제
함수 인수로서 나는 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));
게시 한 코드 스 니펫 중 어느 것도 메모리 거래를하지 않으므로 거의 동일합니다.
다른 모든 사람들이 계속 게시하는 스왑 트릭은 벡터가 원래 사용하는 메모리를 처리하기 때문에 실행하는 데 시간이 오래 걸립니다. 이것은 바람직하거나 바람직하지 않을 수 있습니다.
제휴하지 않습니다 StackOverflow