我已经定义了一个包含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()也是事实.但是,我没有在调试器中检查这些值.
大家好,我很抱歉.这显然是错误的.我又做了 我发布了一个实际上并不存在的错误.我现在无法重现它.你们都可以投票关闭吗 - 或者我可以自己关闭这件事吗?
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.
你构建了你的'小工具'阵列吗?