[問題] 陣列的合併

作者: 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