<?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[Globalen vector-Index in lokalen umwandeln]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde gerne folgende Implementierung etwas anpassen:</p>
<pre><code>static bool getLocalIndex( int&amp; outer_index, int&amp; inner_index, const std::vector&lt;std::vector&lt;int&gt;&gt;&amp; vecs, int globalIndex )
{
  inner_index = globalIndex;
  outer_index = 0;

  int cur_size = vecs[outer_index].size();
  while( inner_index &gt;= cur_size )
  {
    outer_index++;
    if( outer_index &gt;= vecs.size() )
      return false;

    cur_size = vecs[outer_index].size();
    inner_index -= cur_size;
  }

  return inner_index &gt;= 0;
}
</code></pre>
<p>Ich habe einen Vektor aus int-Vektoren samt globalem Index. Enthält der äußere Vektor 2 Vektoren zu je 5 und 10 Elementen, kann ich diesen global von 0 bis 14 indizieren und suche zu diesen globalen Indizes den lokalen Index der Einzelvektoren.<br />
Auf dem obigen Vektor soll meine Funktion also folgendes tun:</p>
<p>int outer, int inner;<br />
getLocalIndex( outer, inner, vec, 3)<br />
// outer = 0, inner = 3</p>
<p>int outer, int inner;<br />
getLocalIndex( outer, inner, vec, 7)<br />
// outer = 1, inner = 2</p>
<p>int outer, int inner;<br />
getLocalIndex( outer, inner, vec, 17)<br />
// out of range error<br />
// outer = ?, inner = ?</p>
<p>Was mich stört:</p>
<ol>
<li>
<p>Argumente per Referenz zu übergeben, die von einer Methode &quot;ausgefüllt&quot; werden, finde ich grundsätzlich eher hässlich. Zum einen ist es schwer zu erkennen, was Input- und was Output-Argument ist, zum anderen muss man vorm call lokale Variablen anlegen, die möglicherweise gar nicht gebraucht werden. Ich will lieber ein pair oder struct als return-Argument.</p>
</li>
<li>
<p>Damit brauche ich natürlich eine andere Möglichkeit, den Fehler zurückzugeben. Bietet sich hier eine Exception an?</p>
</li>
<li>
<p>Kann man den Algorithmus noch insgesamt verbessern? Eine while-Schleife und das multiple Branching erscheint mir noch verbesserungswürdig. Gibts dafür vielleicht sogar was in der std lib?</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/topic/336608/globalen-vector-index-in-lokalen-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 05:23:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336608.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Feb 2016 14:31:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Globalen vector-Index in lokalen umwandeln on Wed, 03 Feb 2016 14:31:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde gerne folgende Implementierung etwas anpassen:</p>
<pre><code>static bool getLocalIndex( int&amp; outer_index, int&amp; inner_index, const std::vector&lt;std::vector&lt;int&gt;&gt;&amp; vecs, int globalIndex )
{
  inner_index = globalIndex;
  outer_index = 0;

  int cur_size = vecs[outer_index].size();
  while( inner_index &gt;= cur_size )
  {
    outer_index++;
    if( outer_index &gt;= vecs.size() )
      return false;

    cur_size = vecs[outer_index].size();
    inner_index -= cur_size;
  }

  return inner_index &gt;= 0;
}
</code></pre>
<p>Ich habe einen Vektor aus int-Vektoren samt globalem Index. Enthält der äußere Vektor 2 Vektoren zu je 5 und 10 Elementen, kann ich diesen global von 0 bis 14 indizieren und suche zu diesen globalen Indizes den lokalen Index der Einzelvektoren.<br />
Auf dem obigen Vektor soll meine Funktion also folgendes tun:</p>
<p>int outer, int inner;<br />
getLocalIndex( outer, inner, vec, 3)<br />
// outer = 0, inner = 3</p>
<p>int outer, int inner;<br />
getLocalIndex( outer, inner, vec, 7)<br />
// outer = 1, inner = 2</p>
<p>int outer, int inner;<br />
getLocalIndex( outer, inner, vec, 17)<br />
// out of range error<br />
// outer = ?, inner = ?</p>
<p>Was mich stört:</p>
<ol>
<li>
<p>Argumente per Referenz zu übergeben, die von einer Methode &quot;ausgefüllt&quot; werden, finde ich grundsätzlich eher hässlich. Zum einen ist es schwer zu erkennen, was Input- und was Output-Argument ist, zum anderen muss man vorm call lokale Variablen anlegen, die möglicherweise gar nicht gebraucht werden. Ich will lieber ein pair oder struct als return-Argument.</p>
</li>
<li>
<p>Damit brauche ich natürlich eine andere Möglichkeit, den Fehler zurückzugeben. Bietet sich hier eine Exception an?</p>
</li>
<li>
<p>Kann man den Algorithmus noch insgesamt verbessern? Eine while-Schleife und das multiple Branching erscheint mir noch verbesserungswürdig. Gibts dafür vielleicht sogar was in der std lib?</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2485747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485747</guid><dc:creator><![CDATA[banshee]]></dc:creator><pubDate>Wed, 03 Feb 2016 14:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to Globalen vector-Index in lokalen umwandeln on Wed, 03 Feb 2016 14:40:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<ol>
<li>
<p>Ich bin da zwar selber kein Fan von, aber viele scheinen für sowas gerne std:tuple zu nehmen.</p>
</li>
<li>
<p>Exception halte ich für falsch, mit 1) auch überflüssig, da Rückgabewert im Tuple</p>
</li>
<li>
<p>Keine Ahnung</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2485752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485752</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 03 Feb 2016 14:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Globalen vector-Index in lokalen umwandeln on Thu, 04 Feb 2016 07:03:18 GMT]]></title><description><![CDATA[<p>3( evtl an npos denken und behaupten, da- da gar keine Fehler auftreten l;nnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485817</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 04 Feb 2016 07:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to Globalen vector-Index in lokalen umwandeln on Thu, 04 Feb 2016 15:15:10 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<ol>
<li>Ich bin da zwar selber kein Fan von, aber viele scheinen für sowas gerne std:tuple zu nehmen.</li>
</ol>
</blockquote>
<p>Joa, kann man machen. Du meinst dann std::tuple&lt;bool, int, int&gt; ? Finde ich zwar auch noch nicht perfekt, da bool und return-Werte jetzt wieder gleichgestellt werden, was sie aber per se nicht sind, aber ist allemal besser als die Referenz-Parameter.</p>
<p>Jockelx schrieb:</p>
<blockquote>
<ol start="2">
<li>Exception halte ich für falsch, mit 1) auch überflüssig, da Rückgabewert im Tuple</li>
</ol>
</blockquote>
<p>Warum? Ist es kein Ausnahmefall, wenn out-of-bounds auf einen Vektor zugegriffen wird?<br />
Man hat hier auch den unschlagbaren Vorteil, dass eigentliche return-Werte und ein &quot;Fehler-Return&quot; ganz klar unterschieden werden.</p>
<p>Jockelx schrieb:</p>
<blockquote>
<p>3( evtl an npos denken und behaupten, da- da gar keine Fehler auftreten l;nnen.</p>
</blockquote>
<p>Wie meinen? <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/2485875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485875</guid><dc:creator><![CDATA[banshee]]></dc:creator><pubDate>Thu, 04 Feb 2016 15:15:10 GMT</pubDate></item><item><title><![CDATA[Reply to Globalen vector-Index in lokalen umwandeln on Thu, 04 Feb 2016 15:20:49 GMT]]></title><description><![CDATA[<p>banshee schrieb:</p>
<blockquote>
<p>Warum? Ist es kein Ausnahmefall, wenn out-of-bounds auf einen Vektor zugegriffen wird?</p>
</blockquote>
<p>Ich hatte das so gelesen: &quot;Ich weiss nicht, wie das mit dem Rückgabewert machen soll, deshalb mach es jetzt als Exception&quot;.<br />
Ob die Funktion eher so eine Suchfunktion sein soll, die auch mal nix findet oder stets einen Index (ausser in Ausnahmefällen) zurückgeben soll, weisst du besser als ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485877</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 04 Feb 2016 15:20:49 GMT</pubDate></item></channel></rss>