获取四叉树中节点的 children 的方法
Method to get the children of a node in quadtree
我正在尝试使用以下方法递归获取节点的所有 children。 getchildren()、addChildren() 和 Node 的构造函数工作正常,但是当我尝试使用下面的方法获取 children 时,向量 kids 似乎是空的,我不明白为什么在我打印 n.getX() 和 n.getY() 时在方法内部给出它,它打印值,所以孩子不应该是空的。这是代码:
void Quad::getChildren(Node n, vector<Node> kids)
{
if(n.getchildren().empty())
{
cout<<"NOOO";
return;
}
else
{
for(Node child: n.getchildren())
{
kids.push_back(child);
getChildren(child, kids);
}
for(Node n: kids)
cout<<n.getX()<<' '<<n.gety()<<endl;
}
}
像这样使用:
vector<Node> kids;
Node n1= Node(0,0,img.cols,img.rows);
Node n2= Node(12,19,34,33);
n1.addChildren(n2);
getChildren(n1,kids);
if(kids.empty())
cout<<"sedfeesdsed";
和输出:
NOOONOOO12 19
sedfeesdsed
不幸的是,目前我只能使用 cout<< 进行调试。
kids
应该是参考。您正在通过副本而不是引用传递向量。 vector kids 是该方法的局部变量,将任何内容推入它不会从调用者推入 vector kids。
void Quad::getChildren(Node n, vector<Node>& kids)
// ^ reference
我正在尝试使用以下方法递归获取节点的所有 children。 getchildren()、addChildren() 和 Node 的构造函数工作正常,但是当我尝试使用下面的方法获取 children 时,向量 kids 似乎是空的,我不明白为什么在我打印 n.getX() 和 n.getY() 时在方法内部给出它,它打印值,所以孩子不应该是空的。这是代码:
void Quad::getChildren(Node n, vector<Node> kids)
{
if(n.getchildren().empty())
{
cout<<"NOOO";
return;
}
else
{
for(Node child: n.getchildren())
{
kids.push_back(child);
getChildren(child, kids);
}
for(Node n: kids)
cout<<n.getX()<<' '<<n.gety()<<endl;
}
}
像这样使用:
vector<Node> kids;
Node n1= Node(0,0,img.cols,img.rows);
Node n2= Node(12,19,34,33);
n1.addChildren(n2);
getChildren(n1,kids);
if(kids.empty())
cout<<"sedfeesdsed";
和输出:
NOOONOOO12 19
sedfeesdsed
不幸的是,目前我只能使用 cout<< 进行调试。
kids
应该是参考。您正在通过副本而不是引用传递向量。 vector kids 是该方法的局部变量,将任何内容推入它不会从调用者推入 vector kids。
void Quad::getChildren(Node n, vector<Node>& kids)
// ^ reference