<?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[Einfachster Weg bei einen Vektor out of range Null zurückzugeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe folgenden Code:</p>
<pre><code>std::vector&lt;int&gt; testVector;
testVector.push_back(1);
testVector.push_back(2);
testVector.push_back(3);
testVector.push_back(4);
testVector.push_back(5);
int test = 0, back_horizont = 3;

for (std::vector&lt;int&gt;::iterator i = testVector.begin(), e = testVector.end(); i != e; ++i) {
	int temp = 0;

	for (int k = 0; k &lt; back_horizont; k++) {
		temp += *(i - k);
	}

	test *= temp;
}
</code></pre>
<p>Dann gibt das ja ein Debug Assertion Failed, da in der inneren for-Schleife der range des Vektors verlassen wird.</p>
<p>Ich hätte jetzt gerne eine kurze und elegante Methode um in so einem Fall dem Wert einfach 0 zuzuweisen - Also wenn *(i - k) out of range ist soll dort einfach Null addiert werden.</p>
<p>Ich könnte in der aäußeren Schleife natürlich eine counter Variable mitschleppen und dann jeweils checken ob i - k noch in der gültigen range liegt, aber ich frage mich ob es eine einfachere/elegantere Lösung gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324491/einfachster-weg-bei-einen-vektor-out-of-range-null-zurückzugeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 15:27:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324491.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Mar 2014 11:40:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einfachster Weg bei einen Vektor out of range Null zurückzugeben on Wed, 19 Mar 2014 11:40:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe folgenden Code:</p>
<pre><code>std::vector&lt;int&gt; testVector;
testVector.push_back(1);
testVector.push_back(2);
testVector.push_back(3);
testVector.push_back(4);
testVector.push_back(5);
int test = 0, back_horizont = 3;

for (std::vector&lt;int&gt;::iterator i = testVector.begin(), e = testVector.end(); i != e; ++i) {
	int temp = 0;

	for (int k = 0; k &lt; back_horizont; k++) {
		temp += *(i - k);
	}

	test *= temp;
}
</code></pre>
<p>Dann gibt das ja ein Debug Assertion Failed, da in der inneren for-Schleife der range des Vektors verlassen wird.</p>
<p>Ich hätte jetzt gerne eine kurze und elegante Methode um in so einem Fall dem Wert einfach 0 zuzuweisen - Also wenn *(i - k) out of range ist soll dort einfach Null addiert werden.</p>
<p>Ich könnte in der aäußeren Schleife natürlich eine counter Variable mitschleppen und dann jeweils checken ob i - k noch in der gültigen range liegt, aber ich frage mich ob es eine einfachere/elegantere Lösung gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389717</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 19 Mar 2014 11:40:23 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachster Weg bei einen Vektor out of range Null zurückzugeben on Wed, 19 Mar 2014 11:45:34 GMT]]></title><description><![CDATA[<p>ein iterator I ist in range wenn gilt begin()&lt;=I&lt;end()</p>
<p>das lässt sich ja auch ohne extra variable easy checken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389718</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 19 Mar 2014 11:45:34 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachster Weg bei einen Vektor out of range Null zurückzugeben on Wed, 19 Mar 2014 11:50:25 GMT]]></title><description><![CDATA[<pre><code>int k_max = std::min&lt;int&gt;(back_horizont, std::distance(testVector.begin(), i) + 1);
    for (int k = 0; k != k_max; ++k)
        temp += i[-k];
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389720</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 19 Mar 2014 11:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachster Weg bei einen Vektor out of range Null zurückzugeben on Wed, 19 Mar 2014 11:56:25 GMT]]></title><description><![CDATA[<p>Das geht sogar viel kürzer:</p>
<pre><code>temp += std::accumulate( i - std::min&lt;int&gt;(back_horizont - 1, i - testVector.begin()), i + 1, 0 );
// bzw.
auto backward = std::min&lt;int&gt;(back_horizont - 1, i - testVector.begin());
temp += std::accumulate( i - backward, i + 1, 0 );
</code></pre>
<p>Ebenfalls ungetestet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389721</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 19 Mar 2014 11:56:25 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachster Weg bei einen Vektor out of range Null zurückzugeben on Wed, 19 Mar 2014 12:55:52 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>ein iterator I ist in range wenn gilt begin()&lt;=I&lt;end()</p>
<p>das lässt sich ja auch ohne extra variable easy checken.</p>
</blockquote>
<p>Hm, ich hab immer i - k &gt;= testVector.begin() getestet, was dann gecrashed ist. Mit i &gt;= testVector.begin() + k dagegen funktioniert es.</p>
<p>Arcoth schrieb:</p>
<blockquote>
<pre><code>int k_max = std::min&lt;int&gt;(back_horizont, std::distance(testVector.begin(), i) + 1);
    for (int k = 0; k != k_max; ++k)
        temp += i[-k];
</code></pre>
<p>(ungetestet)</p>
</blockquote>
<p>Dank, werd ich mir auch mal anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389727</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 19 Mar 2014 12:55:52 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachster Weg bei einen Vektor out of range Null zurückzugeben on Wed, 19 Mar 2014 13:36:02 GMT]]></title><description><![CDATA[<p>[quote=&quot;happystudent&quot;]</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Hm, ich hab immer i - k &gt;= testVector.begin() getestet, was dann gecrashed ist.</p>
</blockquote>
<p>Ziemlich sicher benutzt der Vergleich size_t, was unsigned ist, sodass i - k sehr groß statt negativ wird.<br />
i &gt;= testVector.begin() + k hat dieses Problem nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389739</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Wed, 19 Mar 2014 13:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachster Weg bei einen Vektor out of range Null zurückzugeben on Wed, 19 Mar 2014 13:45:52 GMT]]></title><description><![CDATA[<p>Es reicht auch schon, wenn die Subtraktion zu einem Iterator führt, der ausserhalb des Intervalls [ <code>begin(), end()</code> [ liegt. Jeder Iterator vor <code>begin()</code> ist ungültig und allein dessen Erzeugung führt zu undefiniertem Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2389741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2389741</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 19 Mar 2014 13:45:52 GMT</pubDate></item></channel></rss>