我来自Java方面,如果你想检查ArrayList
中的特定条目是否已分配,你可以在ArrayList
中获得该实体的引用,并检查它是否是是否为空。
基本上我正在努力完成同样的事情。这是我的代码的简化版本:
struct node
{
int count=0;
int nodeval=0;
bool valid=false;
};
bool operator==(const node* n,int val)
{
if (n->count==0&&n->nodeval==0&&n->valid==false)
if(val==NULL)
return true;
else
return false;
}
node* lookup(int val)
{
return &Table[val];
}
int main()
{
res=somevalue;
node* child=lookup(res);
if(child==NULL)
{
//do something
}
}
以下是我的理解:
lookup()
将返回Table数据结构中选择位置的地址。我把它存放在孩子身上。==
中,我检查每个字段是否未更改,如果是,则不更改,因此是“空实体”。问题是==
运算符需要一个用户定义的对象来操作。问题:
答案 0 :(得分:1)
您的问题不是100%清楚,但我会尝试澄清我在您的代码中看到的一些误解:
lookup()
可以返回null。声明该函数返回一个指针,该指针可以为null。如果这不是错误(见下文),则返回null。
在lookup()
内,您首先需要检查Table
是否实际包含具有该索引的元素。如何做到这一点取决于Table
的类型。如果它是一个普通数组,只需检查索引是否小于元素中的大小,如果不是则返回null。
请注意,如果您始终期望查找结果,则返回的类型应该是引用而不是指针。但是,在这种情况下,您需要对无效索引进行错误处理。您可以将这些声明为编程错误,并将assert()
声明为有效。或者,你可以throw std::out_of_range("invalid index")
。
最后,关于你的问题“如何检查指针所指向的对象是否为空?”:答案是如果你有一个指针Object* ptr
,你只需取消引用指针*ptr
并将其与null(即if (*ptr == 0)
)进行比较。但是,这要求对象的类型与null相当,这通常只是数字对象(bool,char,int,float等)和指针的情况。节点类的对象通常不能与null相比,并且使它们与null(使用运算符重载)相当也没有多大意义。