[问题] 阵列的合并

楼主: xxxx5801   2014-09-16 08:10:21
是这样的,最近在作阵列的应用,想请问怎么将两个已知的阵列头尾相
接,组成一个新的阵列,我用的是dev c++
已知二阵列如下:
int a[4] = {1,2,3,4};
int b[4] = {5,6,7,8};
现在想把两个阵列合并,组成一个新的阵列 c[8] = {1,2,...,7,8};
请问该怎么写呢?
目前只有想到用两个循环分别给每个元素设值,程式码如下:
for(int i=0;i<4;i++)
c[i] = a[i];
for(int i=0;i<4;i++)
c[i+4] = b[i];
想请问有没有更快的办法,感谢~
作者: soheadsome (师大狗鼻哥)   2014-09-16 09:22:00
memset
作者: diabloevagto (wi)   2014-09-16 09:24:00
vector 不用吗?
作者: soheadsome (师大狗鼻哥)   2014-09-16 11:08:00
我不懂他的快是指?
作者: pauliaia   2014-09-16 14:27:00
如果是搬资料 你一共搬了八次资料 不就是极限了不过如果考虑到branch prediction 写在一起 理论上会更快 不过如果是C++ 楼上很多建议使用STL 相关物件 相对更快许多 不过他就不是一个单纯Array 而是物件了
作者: b9707114 (阿通)   2014-09-16 19:53:00
搜寻memcpy,这样可以省去for循环每次判断条件的时间抱歉,查资料感觉我说得应该有问题,先无视吧!
作者: tomnelson   2014-09-16 23:52:00
memcpy((void*)&c[0],(void*)&a[0],sizeof(a));memcpy((void*)&c[4],(void*)&b[0],sizeof(b));两行做完,至于快不快不一定,一般来说也只快一点点而已!
作者: LPH66 (-6.2598534e+18f)   2014-09-16 23:59:00
其实不管怎么改写, 该搬的东西就是那些, 顶多只有跟搬资料无关的小地方 (例如五楼提的 branch prediction) 有差而已现代电脑在搬这种数万个以内的小资料已经没什么差了...隔壁版版友有一句话叫做“肮脏事不灭定律”就是在讲这回事另外 array 复制这种事要用 STL 写的话有个 std::copy 可用以此例就是 copy(a,a+4,c); copy(b,b+4,c+4);但其实它骨子里还是原来的 for 循环...
作者: PoorLoser (废文制造机)   2014-09-17 23:49:00
没有, 两个阵列基底位址不太可能连续, 所以不能附加不然自己用 malloc 写一个
作者: LPH66 (-6.2598534e+18f)   2014-09-18 00:06:00
其实如果原 PO 是想要有语意的话, 自己写一个其实是个不错的答案; 总之 C++ Runtime / STL 里没有这个函式就是了是说其实刚才才想到 copy 的回传值是目标的终点后一格所以我写的两个 copy 其实可以合成一个, 这就比较能推广了:http://ideone.com/Zn9APB延伸: http://ideone.com/tM9TQ9 这个应该很接近原PO要求了

Links booklink

Contact Us: admin [ a t ] ucptt.com