作者flamo (迅雷不及掩耳盜鈴)
看板C_and_CPP
標題Re: [問題] 如何進行 struct 之複製?
時間Sun May 16 01:41:03 2010
首先BOOL與bool是不同的東西, 以下假設你用的BOOL.
有沒有更快的? 想不出來.
除非你這樣宣告: BOOL x1[x1_len]
那就有搞頭了
// dest是目標, src是來源
void ChromDeepClone(chrom* dest, const chrom* src)
{
// 假設長度相同
assert(dest->x1_len == src->x1_len);
assert(dest->x2_len == src->x2_len);
dest->fitness = src->fitness;
memcpy(dest->x1, src->x1, sizeof(BOOL) * dest->x1_len);
memcpy(dest->x2, src->x2, sizeof(BOOL) * dest->x2_len);
}
※ 引述《tropical72 (藍影)》之銘言:
: 遇到的問題: (題意請描述清楚)
: 我自定義一個struct , 內容大概如下
: typedef struct chrom{
: BOOL *x1;
: BOOL *x2;
: UINT x1_len;
: UINT x2_len;
: double fitness;
: };
: 同時程式會進行幾個特殊動作
: chrom *parent, *pool, *child;
: parent = (chrom*)malloc(sizeof(chrom)*parent_cnt); // pool, child 同理
: for(UINT i=0; i<parent_cnt; i++){
: parent[i].x1 = (bool*)malloc(sizeof(bool)*x1_len);
: parent[i].x2 = (bool*)malloc(sizeof(bool)*x2_len);
: } // pool, child 同理
: 問題1:
: 若我要將 parent 之所有值都丟到 pool 裡面去
: 除了使用2個 for loop 一個一個 assign 之外, 是否有更快的方法??
: 如欲使用 memcpy 之方式, 請問 size 那裡該如何表示??
: 問題2
: 若設 chrom best;
: 而 best 只是複製 parent 其中的一個,
: 試問 memcpy 之方式是否會簡單些??
: 謝謝各位的細心回覆, 感激不盡!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.24.147.174
→ tropical72:謝謝 f 大細心指教. 發文時的確忘了前後 bool 一致問題 05/16 22:14
→ tropical72:另,x1使用 x1=(bool*)malloc(sizeof(bool)*x1_len); 05/16 22:15
→ tropical72:(因為x1的長度可能會隨執行次數而變..) 05/16 22:16
→ tropical72:故才提此問題,但還是謝謝您的細心解說,非常感謝 05/16 22:16