關於vector使用的優化

2022-09-19 07:12:12 字數 1303 閱讀 2403

1

class

a 10 a(const a&a)

11: m_x(a.m_x)

1215 };

1

void

solve()

2

1

output:

23 a(int

)4 a(const a&)

5 a(int

)6 a(const a&)

7 a(const a&)

8 a(int

)9 a(const a&)

10 a(const a&)

11 a(const a&)

對於上述結果 v.push_back(a(i)),進行了三步操作

①a(1) 建立匿名例項

②對於該匿名例項,v中第一塊未使用的記憶體實行" a(const a& a) ",拷貝構造操作

③vector申請的記憶體是動態改變的,如果 v 執行 push_back操作,發現申請的記憶體已滿,則會申請一塊比原先記憶體大的連續記憶體,然後依次進行拷貝構造,之後拋棄原先的記憶體

從③可以得知,我們如果知識生氣了乙個vector,不設定其申請的記憶體大小,則它會依據壓入資料大小動態申請,拷貝,拋棄原先記憶體的操作,

如果我們得知我們需要大概的 int 個數,則我們可以手動設定vector的大小,防止vector申請記憶體不夠而出現上述情況

1

void

solve()

2

1

output:

2 a(int

)3 a(const a&)

4 a(int

)5 a(const a&)

6 a(int

)7 a(const a&)

可以從 output 看出,我們確實優化了vector相關記憶體和拷貝操作

進一步,從①②中可以,我們其實額外申請了記憶體,然後再對vector的記憶體對申請的臨時的例項拷貝構造,然後丟棄臨時例項,這樣不省事也不省時

為了解決這個情況,vector 提供了 emplace_back函式,實現直接對vector中對未使用的記憶體進行初始化構造操作,傳入的數值對應於初始化列表或者根據有參建構函式進行操作

1

void

solve()

2

output:

a(int)

a(int)

a(int)

這樣,我們使用vector時,效率會高很多,而且優化也不會很複雜

關於vector的使用

vector在做push back的操作的時候如果預置空間不足寫入,則會重新申請記憶體,並把之前的資料拷貝過來。因此當乙個vector物件要做大量push back操作的時候,如果知道要push進去的數量,最好先用reserve開闢好空間,效率會高很多。再者,使用vector的時候要慎重使用引用。如...

關於vector的排序

vector buildstoreys 按樓層排序 方法1 map mapstoreys for auto istorey buildstoreys buildstoreys.clear auto iter mapstoreys.begin while iter mapstoreys.end 按樓層...

關於vector的用法

1.標頭檔案 include 2.用法 1.vectorb 只是代表著 建立了乙個vector的空的物件 別以為這時候的b 0 b 1 等於0 天真。2.vectorv3 10,0 建立乙個有10個元素0的容器 這個時候b 0 0 b 9 0!這個跟陣列一樣 還是會超時 如果你申請的比較大的話 一般...