jma*_*erx 1 c++ iteration algorithm
我试图找出如何反向迭代,并通过这个,或至少调用一个方法反向.
下面是它的工作原理.
小部件有一个Widget*的std :: vector,它是控件的子元素.子矢量是z有序的,这意味着子[0]落后于子[1](按渲染顺序).每个控件都有一个指向其父级的指针,但父级为NULL的根(虚拟)小部件除外.
对于我的渲染,我需要做一个阶梯式的迭代(回到前面)ex:
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];
Run Code Online (Sandbox Code Playgroud)
然而,为了找到鼠标下的哪个小部件,我必须从前到后进行矩形测试:
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];
Run Code Online (Sandbox Code Playgroud)
我需要什么样的迭代才能有效地完成上述两种类型的迭代?(从前到后,从前到后).
谢谢
前向迭代:
void blah_forward(const Widget *p)
{
p->do_something();
std::for_each(p->children.begin(), p->children.end(), blah_forward);
}
Run Code Online (Sandbox Code Playgroud)
反向迭代:
void blah_reverse(const Widget *p)
{
std::for_each(p->children.rbegin(), p->children.rend(), blah_reverse);
p->do_something();
}
Run Code Online (Sandbox Code Playgroud)
(未经测试,但希望你能得到这个想法).