首次构造时,std :: list是否为空 - 即使它是类的成员?

Bee*_*and 0 c++ iterator list

我已经定义了一个包含std::list作为成员的类.当我创建该类的对象时,我希望std :: list为空.但是,我查询了返回的迭代器begin(),end()并发现它们不相等.

如何在初始构造对象时确保我的std :: list成员为空?

这是我班级的代码:

typedef int ShapeHandle;
typedef void o_gadget;

class Gadget
{
public:
    Gadget( int c_id, int g_id, void * desc, size_t numbytes ):
        class_id(c_id), gadget_id(g_id)
        {
            memory = malloc( numbytes );
            father = 0;
            rightbro = 0;
            leftbro = 0;
            firstchild = 0;
            lastchild = 0;
            active = false;
            update = false;
        }
    void * memory;
    std::list<ShapeHandle> myshapes;
    std::list<o_gadget *> children;

    int class_id;
    int gadget_id;
    o_gadget * father;
    o_gadget * rightbro;
    o_gadget * leftbro;
    o_gadget * firstchild;
    o_gadget * lastchild;
    bool active;
    bool update;
};
Run Code Online (Sandbox Code Playgroud)

我比较了这样的迭代器:

    ... 
    // search the tree stopping when we find the ID
Gadget * info = gadgets[from];
std::list<o_gadget *>::iterator iter = info->children.begin();
while( target == 0 && iter != info->children.end()  )
{
    FindGadget(ID, *iter, target);
    iter++;
}
    ... 
Run Code Online (Sandbox Code Playgroud)

我没想到在检查新的时候会输入Gadget那个while循环.我知道这target == 0是真的,所以我认为这iter != info->children.end()也是事实.但是,我没有在调试器中检查这些值.

编辑

大家好,我很抱歉.这显然是错误的.我又做了 我发布了一个实际上并不存在的错误.我现在无法重现它.你们都可以投票关闭吗 - 或者我可以自己关闭这件事吗?

vit*_*aut 5

std :: list的对象默认为空,因此begin()应该等于end().

我在你的Gadget类中没有看到任何错误,并且做一个简单的检查表明'children'成员变量实际上是空的:

#include <iostream>
#include <list>

class Gadget
{
// ...
};

int main()
{
    Gadget g(0, 0, 0, 0);
    std::cout << (g.children.begin() == g.children.end()) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

它打印1因为(begin()== end())计算结果为true.

你构建了你的'小工具'阵列吗?