检查struct数组是否为空

时间:2012-11-01 22:54:06

标签: c++ arrays struct

好的我有一个结构数组,(不是结构的指针数组),-lesson-也是一个内部有一些属性的类。

struct Mystruct{
    lesson* data;
    mystruct* next;
};    

class Myclass{
    public:
        Myclass();
        Mystruct getarray();
    private:
        Mystruct* array;
};
//in the myclass(); constructor I am doing;
Myclass* array = new Myclass[8];

我需要知道是否

array[i].next

是空的或者不是,因为它不是指向结构的指针数组,我不能这样说;

if(array[i] == NULL)

if(&(array[i]) == NULL)

我怎么能这样做,我正在寻找的答案不是“它是一个结构数组,你根本无法做这个检查,如果它是一个指针.... bla bla”。 请帮助我找到一种方法,所有的答案和方法都非常感谢..

* *编辑:让我为您澄清一下,我需要检查一下;

array[i].next = new lesson(//parameters);

这个动作是否完成,我需要知道是否初始化了array [i] th元素中的“next”对象。 (数组的第[i]个元素包含一个链表,我通过列表搜索并向其添加对象,如果列表头不为空,我必须找到一种方法来计算出来并在结尾处添加对象链表)

我怎样才能更清楚,但有些人只是点击不喜欢按钮而不是试图提供帮助,这是一个严重的问题,而不是巨魔,我试图更清楚,就像我可以,但你们没有帮助,只是点击和离开,我还能说些什么......:/

我添加了更多代码,让您想象一下情况。

2 个答案:

答案 0 :(得分:2)

  

是否为空,

定义“空”。你的意思是未初始化?如果是这样,那么只需将每个元素初始化为某个默认值。初始化指向nullptr(C ++ 11)或0的指针,然后在使用它们之前进行检查。对象“空”是没有意义的。

另请注意MyClass是......好吧,根本不是一个班级。总之...

如果您只是使用默认构造函数那么重点是什么?当你分配这个内存时,它将填充默认的构造对象,所以......

struct Mystruct
{
    Mystruct()
      : data(nullptr), next(nullptr) {}

    lesson* data;
    myclass* next;
}; 

现在您正确地将指针xy初始化为null。


根据你的编辑...

  编辑:让我为你澄清一下,我需要检查一下;

     

array [i] .next =新课程(//参数);   这个动作是否完成,我需要知道数组[i]元素中的“下一个”对象是否被初始化。

是的,因为我们现在正确初始化成员变量......

if(!array[i].next)
    // next is null, initialize it

答案 1 :(得分:0)

我认为你问题中的Mystruct和Myclass是相同的类型。

只需将empty()成员函数添加到结构中,然后调用它:

struct Mystruct{
    lesson* data;
    myclass* next;
    bool empty() const { return next == 0; }
};    

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (array[2].empty()) { ....; }

或者添加全局函数empty():

struct Mystruct{
    lesson* data;
    myclass* next;
};    
bool empty(const Mystruct& o) const { return o.next == 0; }

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (empty(array[2])) { ....; }

或者手动检查下一个成员:

struct Mystruct{
    lesson* data;
    myclass* next;
};    

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (array[2].next == 0) { ....; }

BTW,而不是将指针比较为0,将其与nullptr进行比较(如果只有你的编译器支持nullptr)。