[問題] 陣列的合併

看板C_and_CPP作者 (烘焙青)時間11年前 (2014/09/16 08:10), 11年前編輯推噓8(8020)
留言28則, 8人參與, 最新討論串1/1
是這樣的,最近在作陣列的應用,想請問怎麼將兩個已知的陣列頭尾相 接,組成一個新的陣列,我用的是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]; 想請問有沒有更快的辦法,感謝~ -- posted from android BBS reader on my Nokia 3310 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.15.29.107 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1410826228.A.8E1.html ※ 編輯: xxxx5801 (163.15.29.107), 09/16/2014 08:53:25

09/16 09:22, , 1F
memset
09/16 09:22, 1F

09/16 09:24, , 2F
vector 不用嗎?
09/16 09:24, 2F
※ 編輯: xxxx5801 (163.15.29.107), 09/16/2014 10:33:40

09/16 11:08, , 3F
我不懂他的快是指?
09/16 11:08, 3F

09/16 14:27, , 4F
如果是搬資料 你一共搬了八次資料 不就是極限了
09/16 14:27, 4F

09/16 14:28, , 5F
不過如果考慮到branch prediction 寫在一起 理論上會更
09/16 14:28, 5F

09/16 14:29, , 6F
快 不過如果是C++ 樓上很多建議使用STL 相關物件 相對更
09/16 14:29, 6F

09/16 14:31, , 7F
快許多 不過他就不是一個單純Array 而是物件了
09/16 14:31, 7F

09/16 19:53, , 8F
搜尋memcpy,這樣可以省去for迴圈每次判斷條件的時間
09/16 19:53, 8F

09/16 20:11, , 9F
抱歉,查資料感覺我說得應該有問題,先無視吧!
09/16 20:11, 9F

09/16 23:52, , 10F
memcpy((void*)&c[0],(void*)&a[0],sizeof(a));
09/16 23:52, 10F

09/16 23:52, , 11F
memcpy((void*)&c[4],(void*)&b[0],sizeof(b));
09/16 23:52, 11F

09/16 23:54, , 12F
兩行做完,至於快不快不一定,一般來說也只快一點點而已!
09/16 23:54, 12F

09/16 23:59, , 13F
其實不管怎麼改寫, 該搬的東西就是那些, 頂多只有跟搬資料
09/16 23:59, 13F

09/16 23:59, , 14F
無關的小地方 (例如五樓提的 branch prediction) 有差而已
09/16 23:59, 14F

09/17 00:00, , 15F
現代電腦在搬這種數萬個以內的小資料已經沒什麼差了...
09/17 00:00, 15F

09/17 00:01, , 16F
隔壁版版友有一句話叫做「骯髒事不滅定律」就是在講這回事
09/17 00:01, 16F

09/17 00:02, , 17F
另外 array 複製這種事要用 STL 寫的話有個 std::copy 可用
09/17 00:02, 17F

09/17 00:02, , 18F
以此例就是 copy(a,a+4,c); copy(b,b+4,c+4);
09/17 00:02, 18F

09/17 00:03, , 19F
但其實它骨子裡還是原來的 for 迴圈...
09/17 00:03, 19F
先感謝各位大大的回答,可能是我問得不夠清楚 我的意思是 能不能有更方便的方法可以更直接地結合兩個陣列 比方說利用函式或是語法 輸入兩個陣列就能直接結合兩個陣列的方法 感謝! ※ 編輯: xxxx5801 (163.15.29.64), 09/17/2014 08:42:55

09/17 23:49, , 20F
沒有, 兩個陣列基底位址不太可能連續, 所以不能附加
09/17 23:49, 20F

09/17 23:50, , 21F
不然自己用 malloc 寫一個
09/17 23:50, 21F

09/18 00:06, , 22F
其實如果原 PO 是想要有語意的話, 自己寫一個其實是個不錯
09/18 00:06, 22F

09/18 00:07, , 23F
的答案; 總之 C++ Runtime / STL 裡沒有這個函式就是了
09/18 00:07, 23F

09/18 00:08, , 24F
是說其實剛才才想到 copy 的回傳值是目標的終點後一格
09/18 00:08, 24F

09/18 00:08, , 25F
所以我寫的兩個 copy 其實可以合成一個, 這就比較能推廣了:
09/18 00:08, 25F

09/18 00:12, , 26F
09/18 00:12, 26F

09/18 00:19, , 27F
延伸: http://ideone.com/tM9TQ9 這個應該很接近原PO要求了
09/18 00:19, 27F
嗯 感謝回答! ※ 編輯: xxxx5801 (163.15.29.110), 09/19/2014 10:38:00

09/28 17:03, , 28F
推數字ID
09/28 17:03, 28F
文章代碼(AID): #1K5t_qZX (C_and_CPP)