2015-12-05 3 views
1

В нижеприведенной программе я просто создаю пустой вектор, затем изменяю размер до 5 элементов, а затем до 8 элементов.Векторная емкость после изменения размера

Однако после изменения размера до 8 элементов емкость отображается как 10. Почему емкость 10, а не 8 после последнего изменения размера?

Ниже приведен код. Я прокомментировал, где проблема.

//This program has vector method resize() 
//2015-12-05 Sat 12:06 AM 
using namespace std; 
#include<iostream> 
#include<vector> 

int main() 
{ 
    vector<int> vec1; 
    //Initial empty vector 
    cout << "Printing what an empty vector has..." << endl; 
    cout << "Size: " << vec1.size() << endl; 
    cout << "Capacity: " << vec1.capacity() << endl;  
    cout << endl << endl; 

    //Resize to 5, without giving any value. 
    cout << "Printing after resizing to 5 elements..." << endl; 
    vec1.resize(5); 
    cout << "Size: " << vec1.size() << endl; 
    cout << "Capacity: " << vec1.capacity() << endl; 
    cout << endl << endl; 

    //Resize to 8, with value also this time 
    //ISSUE HERE, WHY IS CAPACITY PRINTED AS '10', instead of '8' 
    cout << "Printing after resizing to 8, and also giving values..." << endl; 
    vec1.resize(8, 15); 
    cout << "Size: " << vec1.size() << endl; 
    cout << "Capacity: " << vec1.capacity() << endl; 
    cout << endl; 
    return 0; 
} 

Ниже выход:

user $ ./a.out 
Printing what an empty vector has... 
Size: 0 
Capacity: 0 
Elements: 

Printing after resizing to 5 elements... 
Size: 5 
Capacity: 5 
Elements: 0 0 0 0 0 

Printing after resizing to 8, and also giving values... 
Size: 8 
Capacity: 10 
Elements: 0 0 0 0 0 15 15 15 
user $ 
+4

'size' - количество элементов. «Емкость» - это количество элементов, которые она может хранить перед перераспределением. –

+1

http://stackoverflow.com/questions/6296945/size-vs-capacity-of-a-vector – wizurd

ответ

3

Если запрашиваемый размер больше, чем текущая емкость, емкость обычно в два раза, пока не будет достаточно большой. Это удвоение размера - это то, что удерживает амортизированную стоимость роста при O (1).

+0

в порядке, поэтому программист не имеет контроля над емкостью? Я могу изменить размер? – sps

+2

@sps 'reserve' и' shrink_to_fit' могут изменить емкость. –

Смежные вопросы