Re: [問題] 想請問c++有像c#可以矩陣擴增的語法嗎

作者: EdisonX (卡卡獸)   2014-05-11 23:34:50
恕刪。
我覺得推文蠻有討論空間,沒離程式語言本質,回文討論較佳。
→ EdisonX:@uranusjr,借問題我想問一般若已基於陣列,功能必要加入 05/10 13:04
→ EdisonX:prepend,會怎做? 是否沒什麼優化的空間了 ? 05/10 13:04
→ EdisonX:我的作法頗暴力就是了 Orz 05/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::vector 05/11 21:44
→ Killercat:的界面,然後跟std::vector一樣的記憶體雙倍策略 05/11 21:44
→ Killercat:然後用memory pool來處理所有的segment management 05/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:這東西真的要討論我覺得要去演算法版討論了 =P 05/11 21:48
→ AstralBrain:to樓上:為什麼不用std::deque就好 XD 05/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 就破功了。
問題至此,想知道是否有些技巧可改善此問題,謝謝各位。

Links booklink

Contact Us: admin [ a t ] ucptt.com