2013-04-05 104 views
0

源代碼來了解情況:扁平化結構的數組到C,這陣列++

struct s { 
    int i; 
    float f 
}; 
const int cnt = 10; 

s *source = new s[cnt]; 
/*... fill source ...*/ 

int *dest_i = new int[cnt]; 
float *dest_f = new float[cnt]; 

for (int x = 0; x < cnt; x++) { 
    dest_i[x] = source[x].i; 
    dest_f[x] = source[x].f; 
} 

所以,這裏的問題:是否有不是通過循環遍歷數組任何更快的方法?

+0

好了,你必須複製它們。你如何期望這樣做,而不是通過這種或那種方式循環? – chris 2013-04-05 04:22:39

+0

我想你可以填充扁平數組,因爲你正在填充's'本身,或者完全放棄's'。 – jxh 2013-04-05 04:23:05

+0

@ user315052,沒錯,但是從這個問題來看,我猜你不能。 – chris 2013-04-05 04:23:48

回答

1

你可以展開你的循環。這就是我能想到的一切。

這是一個相當沒有意義的優化自己編寫,編譯器可以嘗試爲你做,如果你啓用它(在GCC,與--funroll-loops編譯)

+0

其實我正在尋找某種類似memcpy模擬功能的東西,如步幅。另外數組的大小不是一個常量(僅在實例中使用),所以我不確定它會以這種方式展開。 – Yarg 2013-04-05 07:05:02