<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Performance bei Baumstruktur iterativ]]></title><description><![CDATA[<p>Hallo, ich durchlaufe eine n-äre Baumstruktur um diese auf dem Bildschirm darszustellen. Mein erster Ansatz war rekursiv, wollte aber aus performance gründen die Struktur nun iterativ durchlaufen.<br />
Hier im Forum war ja vor kurzem eine längere Diskussion &quot;rekursiv vs. iterativ&quot;, in der es hieß, dass eine iterative Implementierung nicht unbedingt einen Performanceschub bringt. Genau das ist nun bei mir passiert. Extra nochmal als iterativen durchlauf programmiert und die Geschwindigkeit ist ziemlich gleich geblieben.</p>
<pre><code class="language-cpp">struct NodeContainer
{
   NodeContainer(const int&amp; i, const Position&amp; p, NodeGraphicsItem* n) : index(i), pos(p), fatherNode(n) {}

   int index;
   Position pos;
   NodeGraphicsItem* fatherNode;
}

void traverseIterative()
{
   std::queue&lt;NodeContainer&gt; queue;
   queue.push_back(NodeContainer(0, Position(0, 0), NULL));

   while (!queue.empty())
   {
      const NodeContainer&amp; currentNodeContainer = queue.front();
      const int numberChildren = tree-&gt;getNumberChilds(currentNodeContainer.index);
      const Node&amp; node = tree-&gt;getNode(currentNodeContainer.index);

      Position pos = getCoordinatesOffset(node.angle, node.length) + currentNodeContainer.fatherPos;

      NodeGraphicsItem* fatherNode = drawNode(currentNodeContainer.index, pos, currentNodeContainer.fatherNode);

      for (int i = 0; i &lt; numberChildren; i++)
         queue.push_back(NodeContainer(tree-&gt;getChildIndex(currentNodeContainer.index, i), pos, fatherNode));

      queue.pop_front();
   }
}
</code></pre>
<p>Ich denke mal, dass vor allem die Operationen auf der Queue ausbremsen. Was für Möglichkeiten gäbe es, dies effektiver zu machen?</p>
<p>Gruß HamsterBacke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266342/performance-bei-baumstruktur-iterativ</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 09:14:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266342.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 May 2010 13:56:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performance bei Baumstruktur iterativ on Fri, 07 May 2010 13:56:07 GMT]]></title><description><![CDATA[<p>Hallo, ich durchlaufe eine n-äre Baumstruktur um diese auf dem Bildschirm darszustellen. Mein erster Ansatz war rekursiv, wollte aber aus performance gründen die Struktur nun iterativ durchlaufen.<br />
Hier im Forum war ja vor kurzem eine längere Diskussion &quot;rekursiv vs. iterativ&quot;, in der es hieß, dass eine iterative Implementierung nicht unbedingt einen Performanceschub bringt. Genau das ist nun bei mir passiert. Extra nochmal als iterativen durchlauf programmiert und die Geschwindigkeit ist ziemlich gleich geblieben.</p>
<pre><code class="language-cpp">struct NodeContainer
{
   NodeContainer(const int&amp; i, const Position&amp; p, NodeGraphicsItem* n) : index(i), pos(p), fatherNode(n) {}

   int index;
   Position pos;
   NodeGraphicsItem* fatherNode;
}

void traverseIterative()
{
   std::queue&lt;NodeContainer&gt; queue;
   queue.push_back(NodeContainer(0, Position(0, 0), NULL));

   while (!queue.empty())
   {
      const NodeContainer&amp; currentNodeContainer = queue.front();
      const int numberChildren = tree-&gt;getNumberChilds(currentNodeContainer.index);
      const Node&amp; node = tree-&gt;getNode(currentNodeContainer.index);

      Position pos = getCoordinatesOffset(node.angle, node.length) + currentNodeContainer.fatherPos;

      NodeGraphicsItem* fatherNode = drawNode(currentNodeContainer.index, pos, currentNodeContainer.fatherNode);

      for (int i = 0; i &lt; numberChildren; i++)
         queue.push_back(NodeContainer(tree-&gt;getChildIndex(currentNodeContainer.index, i), pos, fatherNode));

      queue.pop_front();
   }
}
</code></pre>
<p>Ich denke mal, dass vor allem die Operationen auf der Queue ausbremsen. Was für Möglichkeiten gäbe es, dies effektiver zu machen?</p>
<p>Gruß HamsterBacke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893801</guid><dc:creator><![CDATA[HamsterBacke]]></dc:creator><pubDate>Fri, 07 May 2010 13:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Performance bei Baumstruktur iterativ on Fri, 07 May 2010 14:18:52 GMT]]></title><description><![CDATA[<p>* stack statt queue nehmen<br />
* reserve aufrufen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893823</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 07 May 2010 14:18:52 GMT</pubDate></item><item><title><![CDATA[Reply to Performance bei Baumstruktur iterativ on Fri, 07 May 2010 14:32:36 GMT]]></title><description><![CDATA[<p>Ok danke! Werde es später ausprobieren</p>
<p>Gruß HamsterBacke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893828</guid><dc:creator><![CDATA[HamsterBacke]]></dc:creator><pubDate>Fri, 07 May 2010 14:32:36 GMT</pubDate></item></channel></rss>