看板 C_and_CPP 關於我們 聯絡資訊
是這樣的,最近在作陣列的應用,想請問怎麼將兩個已知的陣列頭尾相 接,組成一個新的陣列,我用的是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
soheadsome: memset 09/16 09:22
diabloevagto: vector 不用嗎? 09/16 09:24
※ 編輯: xxxx5801 (163.15.29.107), 09/16/2014 10:33:40
soheadsome: 我不懂他的快是指? 09/16 11:08
pauliaia: 如果是搬資料 你一共搬了八次資料 不就是極限了 09/16 14:27
pauliaia: 不過如果考慮到branch prediction 寫在一起 理論上會更 09/16 14:28
pauliaia: 快 不過如果是C++ 樓上很多建議使用STL 相關物件 相對更 09/16 14:29
pauliaia: 快許多 不過他就不是一個單純Array 而是物件了 09/16 14:31
b9707114: 搜尋memcpy,這樣可以省去for迴圈每次判斷條件的時間 09/16 19:53
b9707114: 抱歉,查資料感覺我說得應該有問題,先無視吧! 09/16 20:11
tomnelson: memcpy((void*)&c[0],(void*)&a[0],sizeof(a)); 09/16 23:52
tomnelson: memcpy((void*)&c[4],(void*)&b[0],sizeof(b)); 09/16 23:52
tomnelson: 兩行做完,至於快不快不一定,一般來說也只快一點點而已! 09/16 23:54
LPH66: 其實不管怎麼改寫, 該搬的東西就是那些, 頂多只有跟搬資料 09/16 23:59
LPH66: 無關的小地方 (例如五樓提的 branch prediction) 有差而已 09/16 23:59
LPH66: 現代電腦在搬這種數萬個以內的小資料已經沒什麼差了... 09/17 00:00
LPH66: 隔壁版版友有一句話叫做「骯髒事不滅定律」就是在講這回事 09/17 00:01
LPH66: 另外 array 複製這種事要用 STL 寫的話有個 std::copy 可用 09/17 00:02
LPH66: 以此例就是 copy(a,a+4,c); copy(b,b+4,c+4); 09/17 00:02
LPH66: 但其實它骨子裡還是原來的 for 迴圈... 09/17 00:03
先感謝各位大大的回答,可能是我問得不夠清楚 我的意思是 能不能有更方便的方法可以更直接地結合兩個陣列 比方說利用函式或是語法 輸入兩個陣列就能直接結合兩個陣列的方法 感謝! ※ 編輯: xxxx5801 (163.15.29.64), 09/17/2014 08:42:55
PoorLoser: 沒有, 兩個陣列基底位址不太可能連續, 所以不能附加 09/17 23:49
PoorLoser: 不然自己用 malloc 寫一個 09/17 23:50
LPH66: 其實如果原 PO 是想要有語意的話, 自己寫一個其實是個不錯 09/18 00:06
LPH66: 的答案; 總之 C++ Runtime / STL 裡沒有這個函式就是了 09/18 00:07
LPH66: 是說其實剛才才想到 copy 的回傳值是目標的終點後一格 09/18 00:08
LPH66: 所以我寫的兩個 copy 其實可以合成一個, 這就比較能推廣了: 09/18 00:08
LPH66: http://ideone.com/Zn9APB 09/18 00:12
LPH66: 延伸: http://ideone.com/tM9TQ9 這個應該很接近原PO要求了 09/18 00:19
嗯 感謝回答! ※ 編輯: xxxx5801 (163.15.29.110), 09/19/2014 10:38:00
xxxx9659: 推數字ID 09/28 17:03