<?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[Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot;]]></title><description><![CDATA[<p>Ich habe folgendes Szenario: ich will in einer Schleife ueber einen Parameter laufen. Fuer eine Handvoll dieser Parameter muss ich eine Sonderbehandlung machen an Stelle der &quot;normalen&quot; Behandlung. Mir fallen jetzt verschiedene Alternativen ein:</p>
<pre><code class="language-cpp">//vorgegeben:
const int fallA[3] = {2,6,7};
const int fallB[3] = {1,5,11};

void BehandlungA(int i);
void BehandlungB(int i);

for (int i = 0; i &lt; imax; ++i) {
  //Variante A, b, oder c?
}
</code></pre>
<p>Variante A</p>
<pre><code class="language-cpp">switch(i) {
    case 2:
    case 6:
    case 7: BehandlungA(i); break;
    case 1:
    case 5:
    case 11: BehandlungB(i); break;
    default: /*...*/
  }
</code></pre>
<p>Variante B</p>
<pre><code class="language-cpp">if (std::find(fallA, fallA+3, i) != fallA+3)
    BehandlungA(i); continue;
  if (std::find(fallB, fallB+3, i) != fallB+3)
    BehandlungB(i); continue;
  /*...*/
</code></pre>
<p>Variante C</p>
<pre><code class="language-cpp">if (std::find(fallA, fallA+3, i) != fallA+3)
    BehandlungA(i);
  else if (std::find(fallB, fallB+3, i) != fallB+3)
    BehandlungB(i);
  else {
    /*...*/
  }
</code></pre>
<p>Welche der drei wuerdet ihr vorziehen - oder gibts noch eine andere, bessere?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204933/stilfrage-for-schleife-mit-quot-sonderbehandlung-quot</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 22:04:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204933.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Feb 2008 12:32:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Fri, 08 Feb 2008 12:32:22 GMT]]></title><description><![CDATA[<p>Ich habe folgendes Szenario: ich will in einer Schleife ueber einen Parameter laufen. Fuer eine Handvoll dieser Parameter muss ich eine Sonderbehandlung machen an Stelle der &quot;normalen&quot; Behandlung. Mir fallen jetzt verschiedene Alternativen ein:</p>
<pre><code class="language-cpp">//vorgegeben:
const int fallA[3] = {2,6,7};
const int fallB[3] = {1,5,11};

void BehandlungA(int i);
void BehandlungB(int i);

for (int i = 0; i &lt; imax; ++i) {
  //Variante A, b, oder c?
}
</code></pre>
<p>Variante A</p>
<pre><code class="language-cpp">switch(i) {
    case 2:
    case 6:
    case 7: BehandlungA(i); break;
    case 1:
    case 5:
    case 11: BehandlungB(i); break;
    default: /*...*/
  }
</code></pre>
<p>Variante B</p>
<pre><code class="language-cpp">if (std::find(fallA, fallA+3, i) != fallA+3)
    BehandlungA(i); continue;
  if (std::find(fallB, fallB+3, i) != fallB+3)
    BehandlungB(i); continue;
  /*...*/
</code></pre>
<p>Variante C</p>
<pre><code class="language-cpp">if (std::find(fallA, fallA+3, i) != fallA+3)
    BehandlungA(i);
  else if (std::find(fallB, fallB+3, i) != fallB+3)
    BehandlungB(i);
  else {
    /*...*/
  }
</code></pre>
<p>Welche der drei wuerdet ihr vorziehen - oder gibts noch eine andere, bessere?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451915</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 08 Feb 2008 12:32:22 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Fri, 08 Feb 2008 12:37:37 GMT]]></title><description><![CDATA[<p>Hmm, mich würde mal interessieren, ob dieses &quot;fall-through&quot; in Variante a effizienter ist als eine OR-Verknüphung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451921</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Fri, 08 Feb 2008 12:37:37 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Fri, 08 Feb 2008 15:59:07 GMT]]></title><description><![CDATA[<p>ich würde es mit variante b machen. Lässt sich auch einfach mit neuen parametern erweitern. Falls es sich als flaschenhals zeigt, dann variante A.</p>
<p>Variante C find ich nicht toll. Mahct zwar das gleiche, aber durch das continue sieht man besser, das wirklcih nur das eine gemacht werden soll.</p>
<p>__stefan__: ich denk, das switch ist mindestens genauso schnell, vielleicht schneller. Aber das macht glaub ich im endeffekt fast nix aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452077</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Fri, 08 Feb 2008 15:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Fri, 08 Feb 2008 16:10:02 GMT]]></title><description><![CDATA[<p>Ich würds davon abhängig machen, ob sich die Werte für die Sonderbehandlung ändern oder ob die für alle Zeiten fest sind. Wenn sie fest sind, würd ich einfach ein if(i == X || i == Y || i == Z) machen, da der Code mMn am einfachsten wär.<br />
Wenn sich die Werte ändern können, würd ich Variante C mit find oder einer Prädikat Funktion nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452084</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 08 Feb 2008 16:10:02 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Fri, 08 Feb 2008 16:28:36 GMT]]></title><description><![CDATA[<p>Variante B funktioniert nur nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
Denn dank fehlender Klammerung wird das erste continue immer ausgeführt. <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>Wenn es um Performanz geht, lass die Schleife weg und schreib die Anweisungen hintereinander. Dann sparst du dir jede Verzweigung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452094</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 08 Feb 2008 16:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Sat, 09 Feb 2008 16:33:46 GMT]]></title><description><![CDATA[<p>Ich habs jetzt mit Variante B (und natürlich richtiger Klammersetzung) gemacht. Die Schleife aufzudröseln kommt für mich weniger in Frage, da es momentan schon über 25 indizes geht, später vermutlich mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452590</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 09 Feb 2008 16:33:46 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Sat, 09 Feb 2008 18:37:06 GMT]]></title><description><![CDATA[<p>Wie waer's mit Functionpointern? Wenn es viele verschiedene Sonderfaelle gibt wuerd ichs wahrscheinlich so (bzw. so aehnlich) loesen:</p>
<pre><code class="language-cpp">typedef void (*Function)(int i);
typedef std::map&lt;int, Function&gt; FunctionMap;

int main()
{
	const int fallA[3] = {2,6,7};
	const int fallB[3] = {1,5,11};

	FunctionMap functionMap;
	for (int i = 0; i &lt; 3; ++i) functionMap[fallA[i&rsqb;&rsqb; = &amp;BehandlungA;
	for (int i = 0; i &lt; 3; ++i) functionMap[fallB[i&rsqb;&rsqb; = &amp;BehandlungB;

	for (int i = 0; i &lt; 11; ++i)
	{
		FunctionMap::iterator iter = functionMap.find(i);
		if( iter != functionMap.end() )
    		iter-&gt;second(i);
    	else
    		cout &lt;&lt; &quot;Defaultbehandlung\n&quot;;
	}

	return 0;
}
</code></pre>
<p>EDIT: du koenntest natuerlich auch alle moeglichen Indexe mit allen Behandlungsfunktionen in die Map stecken (bzw. in dem Fall dann eher ein Array machen), dann wird die for-Schleife sehr kurz &amp; elegant, da du nicht ueberpruefen musst ob der Index in der Schleife ist, ausserdem waer die Variante dann sehr schnell... aber k.A. ob das jetzt nicht schon zuviel des Guten ist <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="😉"
    /> Wenn es wirklich nur die 2 Sonderbedingungen gibt, ist deine Variante B IMO auch schon relativ nett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452690</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sat, 09 Feb 2008 18:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Sat, 09 Feb 2008 23:18:45 GMT]]></title><description><![CDATA[<p>es gibt genau die zwei Sonderbedingungen, kene mehr - aber danke für die Bemühungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452830</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 09 Feb 2008 23:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: for-Schleife mit &amp;quot;Sonderbehandlung&amp;quot; on Sun, 10 Feb 2008 00:21:38 GMT]]></title><description><![CDATA[<p>warum so kompliziert? einfach in die schleife nen if(1 || 2 || 3) einbauen und fertig. wenn imax wesentlich größer als 11 werden kann, mach zwei schleifen draus. die erste geht bis min(11, imax), die zweite bis imax und verzichtet auf die conditionals. das ist übersichtlich und performant genug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452846</guid><dc:creator><![CDATA[thordk_]]></dc:creator><pubDate>Sun, 10 Feb 2008 00:21:38 GMT</pubDate></item></channel></rss>