看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) g++ 問題(Question): 最近剛接觸vector, 很方便, 省了很多初始化的工作 程式碼也變得簡潔多, 也較好維護 但是同時也降低的程式的效能(很明顯) 請問若沒有要做太多複雜的增刪,是否繼續使用array或pointer就好? 程式碼裡同時有vector和pointer/array混雜這樣的coding style會不會不好? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.142.64.53 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1548855788.A.21F.html ※ 編輯: clonsey1314 (220.142.64.53), 01/30/2019 21:44:36
james732: 我覺得應該要找出你效能降低的原因 01/30 21:51
james732: 譬如是不是用傳值導致太多不必要的複製? 01/30 21:52
對, 程式的確有幾個function是有傳vector, 且這些function不斷地被呼叫 那是不是應該盡量避免將vector型態的變數作為function的參數? ※ 編輯: clonsey1314 (220.142.64.53), 01/30/2019 22:05:44 ※ 編輯: clonsey1314 (220.142.64.53), 01/30/2019 22:09:35
james732: 應該要用傳reference或傳pointer而不是傳value 01/30 23:20
Feis: 1. 用參考. 2. 看能不能改用 array<T> 01/30 23:24
steve1012: 通常vector不會是效能瓶頸 你確認過了嗎 01/31 01:00
s06i06: Vector 效能不會比array差 01/31 01:46
s9041200: 傳參考,不然拉成全域,自己維護狀態 01/31 11:23
謝謝各位,已改傳reference,效能也已獲得改善:) ※ 編輯: clonsey1314 (218.164.36.184), 01/31/2019 11:50:31
chchwy: -O2之後vector跟原生array應該要幾乎一樣快才對 02/01 06:27
LPH66: 主要是複製成本, vector 被 PBV 的話會需要複製 02/01 10:16
LPH66: 所以大家才會建議傳參考 (PBR) 減少複製成本 02/01 10:17
F04E: 降低效能應該是你的問題,source code放出來看看 02/05 19:37
F04E: std::move和emplace_back是你的好朋友 02/05 19:39