亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C+中使用數組或STD:向量,性能差距是什么?

在C+中使用數組或STD:向量,性能差距是什么?

C++ C
SMILET 2019-06-20 17:03:21
在C+中使用數組或STD:向量,性能差距是什么?在我們的C+課程中,他們建議不再在新項目中使用C+數組。據我所知,Stroustroup自己建議不要使用數組。但是有顯著的性能差異嗎?
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

微優化人員的前導

記?。?/trans>

“程序員會浪費大量的時間來思考或擔心程序中非關鍵部分的速度,而這些提高效率的嘗試在考慮調試和維護時實際上會產生很大的負面影響。我們應該忘記效率很小的問題,比如97%的時間:過早的優化是萬惡之源。然而,我們不應在這個關鍵的3%中放棄我們的機會“。

(多虧了變態(全部報價)

不要使用C數組,而不是向量(或其他什么),因為你認為它更快,因為它應該是低級的。你就錯了。

默認使用向量(或適合您的需要的安全容器),然后如果分析器認為這是一個問題,看看是否可以通過使用更好的算法或更改容器來優化它。

這就是說,我們可以回到原來的問題。

靜態/動態陣列?

C+數組類比低級C數組表現得更好,因為它們對自己了解很多,并且能夠回答C數組不能回答的問題。更重要的是,它們通常是使用模板和/或內聯編寫的,這意味著在調試中出現的大量代碼解決了在發布版本中生成的很少或沒有代碼,這意味著與其內置的不太安全的競爭沒有區別。

總而言之,它分為兩類:

動態陣列

使用指向malloc ed/新ed數組的指針最多將與std:vectorv版本一樣快,而且安全性要低得多(請參閱利特的職位).

所以使用std:載體。

靜態陣列

使用靜態數組最多是:

所以請使用STD:數組.

未初始化存儲器

有時,使用vector而不是原始緩沖區會導致可見成本,因為vector將在構造時初始化緩沖區,而它替換的代碼沒有,正如所述伯尼在他的回答.

如果是這種情況,則可以使用unique_ptr而不是vector或者,如果代碼線中的情況不例外,則實際上編寫一個類。buffer_owner這將擁有該內存,并允許您輕松、安全地訪問它,包括調整大小(使用realloc),或者任何你需要的東西。


查看完整回答
反對 回復 2019-06-20
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

矢量是罩下的數組。表演是一樣的。

您可能會遇到性能問題的一個地方是,從一開始就沒有正確地調整向量的大小。

當向量填充時,它將調整自身的大小,這可能意味著一個新的數組分配,后面是n個復制構造函數,然后是大約n個析構函數調用,然后是一個數組DELETE。

如果您的構造/析構是昂貴的,那么最好首先使向量具有正確的大小。

有一個簡單的方法來證明這一點。創建一個簡單的類,它在構造/銷毀/復制/分配時顯示。創建這些東西的向量,并開始將它們推到向量的后端。當向量被填充時,當向量調整大小時,就會出現一連串的活動。然后,使用大小為預期元素數的向量再試一次。你會看到區別的。


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 708 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號