vector物件是如何增長的

2022-08-22 22:21:09 字數 956 閱讀 4024

c++的vector容器相當於提供了長度可變的陣列。但是這個「陣列」的長度是如何增長的呢?

詳見c++ primer(第五版),9.4節。

寫了乙個程式來測試

1

/*vector物件是如何增長的

2* gcc version 4.8.13*/

45 #include 6 #include 7

8using

namespace

std;910

void printsizecapacity(vector&ivec)

1114

15int

main()

1624

25 cout << "

\ncall reserve() to make the vector grow to 50 elements

"<

26 ivec.reserve(50

);27

while (ivec.size() !=ivec.capacity())

30printsizecapacity(ivec);

3132 cout << "

\nadd 1 element

"<

33 ivec.push_back(0

);34

printsizecapacity(ivec);

3536 cout << "

\ncall shrink_to_fit()

"<

37ivec.shrink_to_fit();

38printsizecapacity(ivec);

3940

return0;

41 }

執行結果:

C 中vector的重要特點 物件動態增長

vector物件 以及其它標準容器庫物件 的重要屬性就是可以在執行時高效地新增元素。因為vector增長的效率高,在元素值已知的情況下,最好是動態地新增元素。所以雖然可以對給定元素葛素的vector物件預先分配記憶體,但是更加高效地方法就是先初始化乙個空的vector物件,然後再動態地增加元素。而v...

如何判斷物件是否死亡

主要的方法分為兩種 引用計數演算法和可達性分析演算法,目前常用的就是可達性分析演算法 對乙個物件新增乙個引用的計數器,當該物件被引用依次那麼計數器 1,如果引用被釋放,那麼計數器 1,這樣根據物件最終引用次數為0時,將該物件 缺點 當兩個物件互相的引用,引用計數器就無法得到為0,那麼也就無將物件就行...

vector的增長機制

include stdafx.h include include using namespace std int main int argc,char argv 效果將會如何?成員函式reserve進行一次重新分配,從而改變vector的capacity,使其大於或等於其引數。2.設想不是每次倍增v...