看板 C_and_CPP 關於我們 聯絡資訊
恕刪。 我覺得推文蠻有討論空間,沒離程式語言本質,回文討論較佳。
EdisonX:@uranusjr,借問題我想問一般若已基於陣列,功能必要加入05/10 13:04
EdisonX:prepend,會怎做? 是否沒什麼優化的空間了 ?05/10 13:04
EdisonX:我的作法頗暴力就是了 Orz05/10 13:05
Killercat:vector可prepend 不過的確,效能會很糟糕....05/11 14:53
uranusjr:如果一定要記憶體位址連續那也沒什麼招了吧, 或許可以模05/11 20:33
uranusjr:仿 std::vector 自己做一個前後都 preallocate 的容器..?05/11 20:34
Killercat:這個我以前做過 用circular buffer來實作std::vector05/11 21:44
Killercat:的界面,然後跟std::vector一樣的記憶體雙倍策略05/11 21:44
Killercat:然後用memory pool來處理所有的segment management05/11 21:45
Killercat:我記得有人有做過類似的東西,不算少見。只是這太深了05/11 21:45
Killercat:不過基本上要解決效率問題 circular buffer是個解05/11 21:46
Killercat:有興趣可以做做看 反正vector source code都放在那給你05/11 21:47
Killercat:抄,最麻煩的幾個部分如[]等等眉眉角角照著寫就好05/11 21:47
Killercat:這東西真的要討論我覺得要去演算法版討論了 =P05/11 21:48
AstralBrain:to樓上:為什麼不用std::deque就好 XD05/11 23:09
我把前提假定清楚: 現有一份專案,已有一份 vector<int> var 或 CArray<int,int> var (mfc) , 現有個功能是必須要做 prepend 動作,但如果改到 var 的資料型態的話,相對 的整份專案幾乎是要改寫,這大家都知道基本上不太可能這麼做。這問題暫時被 擱置,因我想的辦法也很暴力,也有機會出錯,所以沒弄上去。 (1) int * ary = (int*)malloc(sizeof(int) * (nReserveSize + nNeddSize) ); (2) var 建構完後, var.m_pData = ary + nReserveSize (這裡暴力) (3) 整個需要做 prepend 動作做完後,再調回來 (這裡也暴力) 有機會出錯是在於,我不知道 nReserveSize 實際上到底會有多大, 所以會導致 vector / CArray 很可能會自己做 Resize 動作, 只要一做 resize 就破功了。 問題至此,想知道是否有些技巧可改善此問題,謝謝各位。 -- ~ 這輩子與神手無緣 我只好當神獸了 ~ 卡卡獸 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.165.160 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1399822493.A.77B.html