我正在尝试弄清楚如何反向迭代并通过它向前,或者至少反向调用一个方法。
这是它的工作原理。
Widgets 有一个 std::vector of Widget* 是控件的 child 。子 vector 按 z 顺序排列,这意味着 child[0] 在 child[1] 之后(按渲染顺序)。每个控件都有一个指向其父控件的指针,但父控件为 NULL 的根(虚拟)控件除外。
对于我的渲染,我需要进行某种程度的阶梯式迭代(从后到前),例如:
root->child[0];
root->child[0]->child[0];
root->child[0]->child[1];
root->child[1];
root->child[1]->child[0];
root->child[1]->child[1];
但是要找到鼠标下的哪个小部件,我必须从前到后在矩形测试中做我的观点:
root->child[9]->child[1];
root->child[9]->child[0];
root->child[9];
root->child[8]->child[2];
root->child[8]->child[1];
root->child[8]->child[0];
root->child[8];
我需要什么样的迭代才能有效地执行上述两种类型的迭代? (从前到后,从前到后)。
谢谢
最佳答案
前向迭代:
void blah_forward(const Widget *p)
{
p->do_something();
std::for_each(p->children.begin(), p->children.end(), blah_forward);
}
反向迭代:
void blah_reverse(const Widget *p)
{
std::for_each(p->children.rbegin(), p->children.rend(), blah_reverse);
p->do_something();
}
(未经测试,但希望您能理解)。
关于c++ - 遍历树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946876/