<?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[den Code vom Chefe optimieren ^^]]></title><description><![CDATA[<p>Hi</p>
<p>Kann man die Funktion noch Optimieren?</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Field
{
//...
		T get_at( int x, int y ) const
		{
			if( ( x &lt; 0 ) || ( x &gt;= m_m ) )
			{
				throw std::range_error( &quot;out of bounds&quot; );
			}
			if( ( y &lt; 0 ) || ( y &gt;= m_n ) )
                        {
				throw std::range_error( &quot;out of bounds&quot; );
			}
			return m_values[ x * m_n + y ];
		}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168326/den-code-vom-chefe-optimieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 11:35:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168326.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Dec 2006 20:19:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:19:16 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Kann man die Funktion noch Optimieren?</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Field
{
//...
		T get_at( int x, int y ) const
		{
			if( ( x &lt; 0 ) || ( x &gt;= m_m ) )
			{
				throw std::range_error( &quot;out of bounds&quot; );
			}
			if( ( y &lt; 0 ) || ( y &gt;= m_n ) )
                        {
				throw std::range_error( &quot;out of bounds&quot; );
			}
			return m_values[ x * m_n + y ];
		}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195662</guid><dc:creator><![CDATA[Optimisierer]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:24:55 GMT]]></title><description><![CDATA[<p>sorg lieber dafür, das nie außerhalb zugegriffen wird. die exceptions bringen doch sowieso nix. Oder mach asserts stattdessen und vlt. pointer statt arrayindex zugriff</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195671</guid><dc:creator><![CDATA[Prof. Hubert J.Farnsworth]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:41:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">T const&amp; get_at( std::size_t x, std::size_t y ) const
{
  std::size_t const index = x * m_n + y;
  if (index &gt; last_index_) {
    throw std::range_error(&quot;out of bounds&quot;);
  }
  return m_values[index];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1195692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195692</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:41:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">T get_at( unsigned x, unsigned y ) const 
        { 
            if( ( x &lt; m_m ) &amp;&amp; ( y &lt; m_n ) &amp;&amp; y &amp; x) 
            { 
                return m_values[ x * m_n + y ]; 
            } 
            throw std::range_error( &quot;out of bounds&quot; ); 
        }
</code></pre>
<p>Ich hab es buchstabentechnisc optimiert, auf das seid ihr doch immer so geil!<br />
Ist aber wahrscheinlich so eher langsamer / gleich schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195693</guid><dc:creator><![CDATA[nunununu]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:41:55 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:44:22 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">T const&amp; get_at( std::size_t x, std::size_t y ) const
{
  std::size_t const index = x * m_n + y;
  if (index &gt; last_index_) {
    throw std::range_error(&quot;out of bounds&quot;);
  }
  return m_values[index];
}
</code></pre>
</blockquote>
<p>Achja? Aber wenns nach dir geht darf man in einem 1000x1 Feld auf das Element [0][999] und [999][0] und sogar [1000][0] und [0][1000] zugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195696</guid><dc:creator><![CDATA[nunuunn]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:46:45 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">T const&amp; get_at( std::size_t x, std::size_t y ) const
{
  std::size_t const index = x * m_n + y;
  if (index &gt; last_index_) {
    throw std::range_error(&quot;out of bounds&quot;);
  }
  return m_values[index];
}
</code></pre>
</blockquote>
<p>eigentlich falsch. überläufe nicht bedacht.<br />
aber der unsigned-trick ist fein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195700</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:48:36 GMT]]></title><description><![CDATA[<p>nunununu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">T get_at( unsigned x, unsigned y ) const 
        { 
            if( ( x &lt; m_m ) &amp;&amp; ( y &lt; m_n ) &amp;&amp; y &amp; x) 
            { 
                return m_values[ x * m_n + y ]; 
            } 
            throw std::range_error( &quot;out of bounds&quot; ); 
        }
</code></pre>
</blockquote>
<p>Das &amp; x&amp;y muss natuerlich weg, weis net was ich dabei gedacht hab. Wollte irgendwie die 0 weg haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195702</guid><dc:creator><![CDATA[nunununu]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:48:36 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:49:11 GMT]]></title><description><![CDATA[<p>nunununu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">T get_at( unsigned x, unsigned y ) const 
        { 
            if( ( x &lt; m_m ) &amp;&amp; ( y &lt; m_n ) &amp;&amp; y &amp; x) 
            { 
                return m_values[ x * m_n + y ]; 
            } 
            throw std::range_error( &quot;out of bounds&quot; ); 
        }
</code></pre>
<p>Ich hab es buchstabentechnisc optimiert, auf das seid ihr doch immer so geil!<br />
Ist aber wahrscheinlich so eher langsamer / gleich schnell.</p>
</blockquote>
<p>warum das &quot;&amp;&amp; y &amp; x&quot; ?<br />
ohne dem isses richtiger und schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195703</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:49:23 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>eigentlich falsch. überläufe nicht bedacht.<br />
aber der unsigned-trick ist fein.</p>
</blockquote>
<p>Verrat mir den Trick, bitte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195704</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:50:27 GMT]]></title><description><![CDATA[<p>Opti schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>eigentlich falsch. überläufe nicht bedacht.<br />
aber der unsigned-trick ist fein.</p>
</blockquote>
<p>Verrat mir den Trick, bitte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>unsigned Werte sind nie negativ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>ps: volkhard du bist einfach zu langsam! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195706</guid><dc:creator><![CDATA[nunununu]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:50:27 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 20:53:30 GMT]]></title><description><![CDATA[<p>nunununu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">T get_at( unsigned x, unsigned y ) const 
        { 
            if( ( x &lt; m_m ) &amp;&amp; ( y &lt; m_n ) &amp;&amp; y &amp; x) 
            { 
                return m_values[ x * m_n + y ]; 
            } 
            throw std::range_error( &quot;out of bounds&quot; ); 
        }
</code></pre>
<p>Ich hab es buchstabentechnisc optimiert, auf das seid ihr doch immer so geil!<br />
Ist aber wahrscheinlich so eher langsamer / gleich schnell.</p>
</blockquote>
<p>Wenn jemand hier für x und y 0 eingibt kommt bei x &amp; y auch 0 raus, wodurch dann die exception getriggert wird.</p>
<p>Edit: zu langsam getipped <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195708</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Dec 2006 20:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 21:03:12 GMT]]></title><description><![CDATA[<p>Finde es amüsant, dass die vorgeschlagenen Optimierungen keine sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich würd es zu folgendem ändern:</p>
<pre><code class="language-cpp">const T&amp; get_at( size_t x, size_t y ) const
        {
            if( ( x &gt;= m_m ) || y &gt;= m_n )
              throw std::range_error( &quot;out of bounds&quot; );

            return m_values[ x * m_n + y ];
        }
</code></pre>
<p>Nen signed Typ für die Indizes zu nehmen ist ein Fehler, wenn negative Werte keine gültigen Werte sind. Eine const-Referenz zurückzugeben ist sicher auch nicht verkehrt, aber bei kleinen Typen wäre es ja egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195716</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Wed, 20 Dec 2006 21:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 21:13:55 GMT]]></title><description><![CDATA[<p>lolz schrieb:</p>
<blockquote>
<p>Nen signed Typ für die Indizes zu nehmen ist ein Fehler, wenn negative Werte keine gültigen Werte sind. Eine const-Referenz zurückzugeben ist sicher auch nicht verkehrt, aber bei kleinen Typen wäre es ja egal.</p>
</blockquote>
<p>Was heisst klein? Es sind Zeiger:</p>
<pre><code class="language-cpp">private:
		T* m_values;
		unsigned m_m;
		unsigned m_n;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1195723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195723</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Wed, 20 Dec 2006 21:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 21:18:20 GMT]]></title><description><![CDATA[<p>Und was wäre hier zu machen?</p>
<pre><code class="language-cpp">bool operator==( const Creature&amp; lhs, const Creature&amp; rhs )
{
	return typeid( lhs ) == typeid( rhs ) ? true : false;
}
</code></pre>
<p>Zwei Kreaturen sollen auf gleiche Art verglichen werden.<br />
Arten sind Subklassen von Creature,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195726</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Wed, 20 Dec 2006 21:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 21:34:36 GMT]]></title><description><![CDATA[<p>double dispatch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195735</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Wed, 20 Dec 2006 21:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Wed, 20 Dec 2006 22:52:41 GMT]]></title><description><![CDATA[<p>Opti schrieb:</p>
<blockquote>
<p>Und was wäre hier zu machen?</p>
<pre><code class="language-cpp">bool operator==( const Creature&amp; lhs, const Creature&amp; rhs )
{
	return typeid( lhs ) == typeid( rhs ) ? true : false;
}
</code></pre>
<p>Zwei Kreaturen sollen auf gleiche Art verglichen werden.<br />
Arten sind Subklassen von Creature,</p>
</blockquote>
<p>Wenn die &quot;optimierte&quot; Version 100% dasselbe verhalten haben soll kann man hier garnix machen, ausser den sinnlosen &quot;?&quot; Operator wegmachen (was bei einem guten Compiler aber genau 0 Auswirkungen auf die Laufzeit haben wird).</p>
<p>Double dispatch (wurde erwähnt) wäre eine Möglichkeit wenn man in alle Subklassen eingreifen kann und möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195778</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 Dec 2006 22:52:41 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Fri, 22 Dec 2006 11:23:29 GMT]]></title><description><![CDATA[<p>Nee, also double dispatch funktioniert hier nicht.<br />
Ich beschreib mal das Problem:<br />
Es wird eine Liste (std::list) erstellt mit verschiedenen Creatures<br />
Aus dieser Liste sollen alle entfernt werden, die nicht einer bestimmten Art entsprechen.<br />
Es gibt einen Funktor (remove_if_not) und der op() vergleicht die beiden Creatures. Der oben gezeigte op= dient dazu als predicate.</p>
<p>Wäre es ev. schneller, den Creature Subtypen eine static ID mitzugeben, die dann verglichen wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196572</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Fri, 22 Dec 2006 11:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Fri, 22 Dec 2006 21:42:56 GMT]]></title><description><![CDATA[<p>Opti schrieb:</p>
<blockquote>
<p>Wäre es ev. schneller, den Creature Subtypen eine static ID mitzugeben, die dann verglichen wird?</p>
</blockquote>
<p>Mit dem MSVC wäre das garantiert um einiges (!) schneller.<br />
(Andere compiler weiss ich nicht, müsstest du ausprobieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196815</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 22 Dec 2006 21:42:56 GMT</pubDate></item><item><title><![CDATA[Reply to den Code vom Chefe optimieren ^^ on Sun, 24 Dec 2006 13:32:53 GMT]]></title><description><![CDATA[<p>Das ist mit dem gcc sogar langsamer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197386</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Sun, 24 Dec 2006 13:32:53 GMT</pubDate></item></channel></rss>