2014-01-05 193 views
1

我試圖實現KD樹在一個應用程序我建立和當前的例子是這樣的:從NSArray初始化結構?

struct kd_node_t { 
    int trapID; 
    double x[MAX_DIM]; 
    struct kd_node_t *left, *right; 
}; 

struct kd_node_t wp[] = 
    { 
     {1, {2, 3}}, {1, {5, 4}}, {1, {9, 6}}, {1, {4, 7}}, {1, {8, 1}}, {1, {7, 2}} 
    }; 

我想要做的就是把動態的結構數組,而不是少數像例。 任何想法我該怎麼做?

編輯:

我意識到這個問題應該是不同的 - >如何從初始化數據的NSArray這個特定的結構?

+0

爲什麼要使用'NSArray'的實例? C能夠將動態大小的數組放入結構中。至少有兩種方法。 –

回答

0

你可以:

struct kd_node_t { 
    NSArray *myArray 
}; 

kd_node_t myStruct; 
myStruct.myArray = [newArray retain]; 

它應該工作。

+2

請注意,如果您使用自動引用計數(ARC),將無法編譯。 –

+0

阿庫雷利,在ARC它做相當複雜... –

+0

http://stackoverflow.com/questions/11857117/unsafe-unretained-nsstring-struct-var 這可以幫助基於ARC的應用程序。 –

0

如果您使用的是ARC,那麼使用NSArray *字段定義struct並不重要,但如果您準備使用__unsafe_unretained引用,則可以完成該操作。

從您的問題中不清楚您出於某種原因需要使用struct。如果你正在做它來獲得一個「輕量級」的結構,那麼可以使用methodless類:

@interface KD_Node : NSObject 
{ 
    int trapID; 
    NSArray *x; 
    KD_Node *left, *right; 
} 
@end 

@implementation KD_Node 
@end 

除分配,哪裏malloc()(或朋友)的調用由[KD_Node new]更換,使用KD_Node *是就像使用struct kd_node_t * - 使用->運算符來引用字段(實例變量)。與直接struct相比,存在輕微的存儲開銷,但您可以毫無問題地使用NSArray *。 (當然如果你願意的話,你以後可以添加屬性和/或方法。)

HTH