2010-05-01 4 views

답변

7

구현이 정의되었습니다. vector의 기본 생성자는 아무 것도 할당 할 필요가 없지만이를 구현하는 것은 허용됩니다.

0

스택의 벡터 컨테이너 공간 외에 할당을 트리거하지 않는 첫 번째 인스턴스 (일반적으로 할당 된 공간 및 사용 된 공간에 대한 정보가 모두 포함됩니다. 둘 다 0입니다). 그러나 힙 할당은 예약 할 때까지 발생하지 않습니다. ... 전형적으로.

+0

일반적으로, 그래,하지만 표준이의 아무것도 말하지 않는다. –

2

이 표준은 말을하지 않습니다,하지만 당신은 당신의 시스템에 어떤 이상형을 찾을 수 있습니다

vector<int> v; 
cout << v.capacity() << endl; 
v.reserve(100); 
cout << v.capacity() << endl; 

이 나에게 0 및 VS2008에 100 제공 - 즉 초기 벡터는 아무것도 할당되지했습니다.

편집 : 잘못된 조언을 삭제했습니다.
EDIT2 : 리틀 실험, 나는 호기심 때문에 ...

vector<int> w; 
for (int i=0; i<100000; i++) 
{ 
    if (i == w.capacity()) 
     cout << i << ", "; 
    w.push_back(i); 
} 

출력 :

0, 1, 2, 3, 4, 6, 9, 13, 19, 28, 42, 63, 94, 141, 211, 316, 474, 711, 1066, 
1599, 2398, 3597, 5395, 8092, 12138, 18207, 27310, 40965, 61447, 92170, 
+1

대답의 첫 번째 절반은 +1, 두 번째 절반은 -1. 'w (100)'은'w()와는 다르다; w.reserve (100)'입니다. 왜냐하면 생성자 default를 사용하면 100 개의 요소가 생성되기 때문입니다. (즉, '크기'는 두 번째 예에서 구성한 후에도 100입니다.) –

+0

오, 이런, 맞아요. 나는 그 비트를 제거 할 것이다. – tzaman

+0

''vector''는''push_back''이 일정한 시간 복잡도를 상각 할 수 있다는 요구를 만족시키기 위해 기하 급수적으로 커집니다. 실험을 게시 한 이후의 FYI입니다. :-) –

관련 문제