2014-04-13 114 views
0

我有麻煩型載體<矢量>轉換爲array.So遠,我試圖做下列(與來自/ U幫助/羅伯特Crovella)轉換向量陣列

pos_x_h=(double *)malloc(N*sizeof(double)); 
pos_y_h=(double *)malloc(N*sizeof(double)); 
for (int i = 0; i<N; i++){ 
    vector<double> temp = r[i]; 
    pos_x_h[i] = temp[i][0]; 
    pos_y_h[i] = temp[i][1]; 
} 

這裏,r是具有N個元素的位置向量,每個元素具有x和y分量。我也試過

double arr[N]; 
std::copy(r.begin(), r.end(), arr); 

兩次嘗試都沒有工作,我不知道爲什麼。你可以看到代碼here

+2

您不需要使用兩個索引對'temp'進行索引。只需使用'temp [0]'和'temp [1]'。如果你#include ''你不需要(也不應該)施加'malloc'的返回值。這是「老」的C(我知道...我從1982年的K&R書中得知,在我明智之前)。 – Floris

回答

2

以下應該工作。請注意,我更喜歡sizeof *pos_x_h而不是sizeof(double),因爲前者確保即使您更改變量的類型(可能位於另一段代碼中)的大小也是正確的。 已更新 *對於C++,您需要投下malloc的結果。我用我的C帽子思考...

第二次更新

多一點想法告訴我,你真的不希望有temp作爲載體 - 這只是使事情更混亂。相反,指向的r[i]第一個元素的地址:這個編譯沒有錯誤

pos_x_h=(double *)malloc(N*sizeof(double)); 
    pos_y_h=(double *)malloc(N*sizeof(double)); 
    for (int i = 0; i<N; i++){ 
     double* temp; 
     temp = &r[i][0]; 
     pos_x_h[i] = temp[0]; 
     pos_y_h[i] = temp[1]; 
    } 

當然,你可以簡單地做

pos_x_h=(double *)malloc(N*sizeof(double)); 
    pos_y_h=(double *)malloc(N*sizeof(double)); 
    for (int i = 0; i<N; i++){ 
     pos_x_h[i] = r[i][0]; 
     pos_y_h[i] = r[i][1]; 
    } 

,避免全亂了。

+0

您可以添加一個評論:在OP標記的C++代碼中使用新的更好嗎? – 0x90

+0

Gaahhh ...這仍然不起作用。這也給了我相同的錯誤1)賦值中的不兼容類型,2)在賦值中不能將'double'轉換爲'double *'。這裏發生了什麼? *哭泣* – Krishna

+0

@ 0x90我不確定在這種情況下哪裏會有幫助,因爲循環中的每個迭代都使用一個新的'temp'實例(它指向一個新的值)。你能澄清嗎? – Floris