Programming

std :: vector의 초기 크기를 설정하는 방법은 무엇입니까?

procodes 2020. 7. 27. 21:37
반응형

std :: vector의 초기 크기를 설정하는 방법은 무엇입니까?


나는 vector<CustomClass*>벡터에 많은 항목을 넣었고 빠른 액세스가 필요하므로 목록을 사용하지 않습니다. 벡터의 초기 크기를 설정하는 방법 (예 : 20 000 자리이므로 새 삽입시 복사를 피하기 위해)?


std::vector<CustomClass *> whatever(20000);

또는:

std::vector<CustomClass *> whatever;
whatever.reserve(20000);

전자는 배열의 실제 크기를 설정합니다. 즉, 20000 포인터의 벡터로 만듭니다. 후자는 벡터를 비워 두지 만 20000 포인터를위한 공간을 확보하므로 재할 당하지 않고도 많은 수를 삽입 할 수 있습니다.

적어도 내 경험상, 이들 중 하나가 성능에 큰 차이를 만드는 것은 매우 드문 일이지만 일부 상황에서는 정확성에 영향을 줄 수 있습니다. 특히, 재 할당이 발생하지 않는 한 벡터에 대한 반복자는 유효한 상태를 유지하며 크기 / 예약 공간을 설정 한 후에는 재 할당이없는 한 재 할당 할 수 없습니다. 그 이상으로 크기를 늘리십시오.


초기 할당 크기를 설정하거나 초기 생성자에서 예약하려면 예약 기능을 사용해야합니다.

vector<CustomClass *> content(20000);

또는

vector<CustomClass *> content;
...
content.reserve(20000);

reserve()요소를 만들 때 vector많은 요소를 (적어도?) 충분한 공간을 할당합니다. 에 요소가 없지만 vector메모리를 사용할 수 있습니다. push_back()메모리가 이미 할당되었으므로 속도가 빨라질 수 있습니다.

참고 URL : https://stackoverflow.com/questions/11457571/how-to-set-initial-size-of-stdvector

반응형