【问题标题】:Method to get the children of a node in quadtree获取四叉树中节点子节点的方法
【发布时间】:2021-07-10 05:04:16
【问题描述】:

我正在尝试使用以下方法递归获取节点的所有子节点。 getchildren()、addChildren() 和 Node 的构造函数工作正常,但是当我尝试使用下面的方法获取孩子时,向量 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 进行调试

【问题讨论】:

    标签: c++ quadtree


    【解决方案1】:

    kids 应该是一个参考。您正在通过副本传递向量,而不是引用。 vector kids 是该方法的本地,将任何内容推入其中不会从调用者推入 vector kids。

    void Quad::getChildren(Node n, vector<Node>& kids)
    //                                         ^ reference
    

    【讨论】:

    • 现在可以使用了,谢谢!但是我似乎只从它下面的一个级别而不是从它下面的所有级别获取该节点的子节点,你知道为什么吗?
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多