2016-07-13 29 views
0

我想有一個結構中有幾個閃電++數組。這個程序創建了這樣一個結構,但我無法正確分配對象。是唯一的替代方案,將指針的結構制定爲在結構外部分配的blitz ++數組?閃電++數組結構

#include <iostream> 
#include <blitz/array.h> 

using namespace std; 
using namespace blitz; 

struct Bstruct{ 
    Array<double,1> B; 
}; 

int main(){ 

    Bstruct str; 
    Array<double,1> x(10); 
    x = 1.0; 
    str.B = x; 

    cout << "x = " << x << endl; 
    cout << "str.B = " << str.B << endl; 

    return 0; 
} 

➜ blitz_struct git:(master) ✗ ./struct 
x = (0,9) 
[ 1 1 1 1 1 1 1 1 1 1 ] 

str.B = (0,-1) 
[ ] 
+0

上面剪斷代碼的最後顯示了該程序的輸出。 'x'和'str.B'應該是一樣的。 –

+0

大概'blitz :: Array'沒有提供適當/深層的複製賦值操作符。它的明顯的主頁已經關閉了,所以我無法檢查標題! –

+0

是的,我知道主頁已關閉,這真的很痛苦。無論如何,這現在工作。 –

回答

0

,我發現這個工作:

#include <iostream> 
#include <blitz/array.h> 

using namespace std; 
using namespace blitz; 

struct Bstruct{ 
    Array<double,1> B; 
}; 

int main(){ 

    Bstruct str; 
    Array<double,1> x(10); 
    x = 1.0; 
    str.B.resize(10); 
    str.B = 1.0; 

    cout << "x = " << x << endl; 
    cout << "str.B = " << str.B << endl; 

    return 0; 
} 

➜ blitz_struct git:(master) ✗ ./struct      
x = (0,9) 
[ 1 1 1 1 1 1 1 1 1 1 ] 

str.B = (0,9) 
[ 1 1 1 1 1 1 1 1 1 1 ] 
+1

沒錯,所以看起來'blitz :: Array'不提供一個非破壞的複製賦值操作符。如果我需要非標準容器,我一定要避免它。有沒有理由不能使用'std :: vector',它具有合理的複製分配語義? –

+0

是的,不幸的是,這是用閃電++編寫的遺留代碼片段,並將其改爲其他任何內容都將是一項巨大的工作。這就是爲什麼。 –

+0

哦對不起,也許我沒有你的問題。你問爲什麼我不能使用'std :: vector'而不是struct?我想爲元素命名,而不是'container.at(3)',例如,如'container.named_element'中所示。 –