我正在尝试在我构建的应用中实现KD Tree,当前的示例是这样的:
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 :(得分:0)
你可以:
struct kd_node_t {
NSArray *myArray
};
kd_node_t myStruct;
myStruct.myArray = [newArray retain];
它应该有用。
答案 1 :(得分:0)
如果您使用ARC,那么使用struct
字段定义NSArray *
并非易事,但如果您准备使用__unsafe_unretained
引用,则可以这样做。
从您的问题中不清楚您出于某种原因需要使用struct
。如果你这样做是为了获得“轻量级”结构,那么可以使用无方法类:
@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