C 中vector用push back更好還是直接規定起始大小更好?

時間 2021-08-12 04:52:42

1樓:exiledkingcc

對於T=int,push_back要慢一些。

第一種,開優化很容易優化成simd指令。而用push_back,每次要修改end指標,不能優化為simd指令。

至於開始初始化的開銷,可以看作是在賦值裡面進行初始化的。也就是第一種方式是兩次賦值,對比push_back一次呼叫。但是前者可以向量化,後者不行。

如果T是複雜型別,有明顯的構造、析構開銷,那就可能是push_back更快一些。

2樓:xyc

reserve本質上是為了搞帶建構函式的class才要使用的(那畢竟不能調那麼多次構造(resize和vector的構造會掉用其元素的構造))

至於速度如果是為了防止棧炸裂的話 vector用建構函式指定大小挺好不然的話直接array(其實new array也是種選擇)

reserve 僅在你需要用到size且不希望構造那麼多的class的情況下使用(對於int這種可以理解成沒有構造這個東西也就是沒有後者的約束條件)(int這種能用resize還是resize好啊)

3樓:二丫

那肯定是陣列最好啊。

vector一般應該用在高精度模擬上吧。。

當然也有一種方法,只有資料儲存的方式不同,n應該在1e5+10的數量。 提交到OJ上看看時間,陣列肯定第一,初始化vector應該是第二,最慢肯定是push_back

c 中明明有vector了為什麼還要有stack?

飛翔的荷蘭豬 作為乙個類的設計者,不僅要考慮類的使用者所需要的的功能,也要考慮如何限制類使用者的不當操作。同樣當需要乙個stack的時候,很有可能下標訪問,中間插入等操作,會影響物件本身功能的時候。要限制這種操作,一是注釋告訴物件使用者,禁止使用下標訪問等操作,當更好的辦法是,從根本上就不提供這樣的...

C 中 vector 重新分配記憶體是怎樣實現的?

這個問題很好回答啊 1重新分配記憶體一般是擴大1.5倍 2倍什麼的具體不確定。2肯定要把原來的物件拷貝過去啊涉及到拷貝初始化物件,則會用到copy建構函式或者移動建構函式 c primer第五版一書中講到 c11新添了移動構造所以調研移動構造。若是c98則只能是copy構造咯.3肯定是虛構原來的物件...

STL中vector的動態記憶體問題

對於vs,是在棧上有一塊空間,空間裡面用了三個指向堆的指標來管理一塊堆上的記憶體,對於p,是在堆上有一塊空間,空間裡面用了三個指向堆的指標來管理一塊堆上的記憶體。比如對於vector Widget 你的一些Widget物件永遠是在堆上的,在一塊連續的記憶體中,但是管理這塊記憶體的那個物件可以在棧上,...