我已经在C#中实现了一个四叉树,并且遇到了一个奇怪的现象,其中递归似乎比迭代更好,尽管它看起来应该是相反的.
我的节点看起来像这样:
class QuadNode
{
private QuadNode topLeft;
private QuadNode topRight;
private QuadNode bottomRight;
private QuadNode bottomLeft;
// other fields...
}
Run Code Online (Sandbox Code Playgroud)
为了遍历树,我使用了以下递归方法,我在根节点上调用:
Traverse()
{
// visit 'this'
if (topLeft != null)
topLeft.Traverse();
if (topRight != null)
topRight.Traverse();
if (bottomRight != null)
bottomRight.Traverse();
if (bottomLeft != null)
bottomLeft.Traverse();
}
Run Code Online (Sandbox Code Playgroud)
主要是出于兴趣,我试图创建一个遍历树的迭代方法.
添加以下字段到每个节点:private QuadNode next,当我创建树我使用队列,连接进行广度优先遍历next各节点的字段中线上的下一个节点.基本上我从树的节点创建了一个单链表.
此时,我可以使用以下方法遍历树:
Traverse()
{
QuadNode node = this;
while (node != null)
{
// visit node
node = node.next;
}
}
Run Code Online (Sandbox Code Playgroud)
测试每个方法的表现后,我很惊讶地得知,迭代版本是一致且明显比递归一个慢.我已经在巨大的树木和小树上进行了测试,递归方法总是更快.(我用了一个Stopwatch标杆)
,我证实,这两种方法成功地遍历整个树和迭代版本只访问每个节点恰好一次按计划进行 …
几年前,我曾经使用Visual Basic 6进行编程,我能够创建具有相同名称的对象,然后通过索引区分它们。例如,我们可以创建TextBox1和另一个TextBox1但具有不同的索引。现在这个功能不再可用了!目前,我使用的是Visual Studio 2012。无论如何要操纵VS2012以再次启用该功能,或者是否有类似的东西,因为它真的很有帮助。
我正在开发一个项目,点击按钮后需要管理员权限.目前正在使用C#和VB.NET.你的答案语言取决于你,但如果是在其中一种语言中则更好.:)
我已经尝试过以下方法:
如前所述,仅在单击按钮时才需要管理员权限.如果从未点击过,则无需权限!
因此,无论如何都要通过UAC 在运行时授予管理员权限.无需重新启动应用程序.
我搜索过网络,我得到的只是上面提到的方法:)
注意:我发现类似于Microsoft Security Essential中所需的内容,它可以在不启动应用程序的新实例的情况下授予管理员权限.
说明:运行MSE时,默认情况下,您会在" 历史记录"选项卡中找到第一个单选框.将此更改为任何其他选项并授予权限将不会重新启动应用程序,因此保持当前状态.
非常感谢任何帮助.
最近,我开始使用C++处理OpenGL.
我对通过声明Vertex或更改当前颜色的方式感到恼火
在glColor3f()和glVertex{2,3,4}{sdif}()方法.
那么,为什么OpenGL不会重载这些功能.
例如,输入更好glColor(),glVertex()并且它们将被参数数量及其类型识别.
最终,代码看起来会更好,更容易阅读,结果相同.
我希望有一个很好的理由不要重载类似的功能.