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