<?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[Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe einen vector&lt;int&gt;, der eine Zahl repräsentieren soll. Die &quot;Ziffern&quot; sind in umgekehrter Reihenfolge angeordnet, sodass an das Ende des vectors beliebig viele Nullen angehangen werden können.<br />
Gibt es eine Standardlösung, alle Nullen am Ende des vectors besonders elegant und effizient mit einem Algorithmus aus der STL zu löschen?<br />
Mein Ansatz sähe irgendwie so aus:</p>
<pre><code class="language-cpp">bool pred(const int&amp; i)
{
    return i != 0;
}
//...
std::vector&lt;int&gt; v;
v.erase(find_if(v.rbegin(), v.rend(), pred), v.end());
</code></pre>
<p>Allerdings kompiliert das nicht, da find_if nicht mit reverse_iteratoren arbeiten kann. Wie würdet ihr das Problem lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288079/frage-zu-standardlösung-für-das-löschen-gleicher-elemente-am-vectorende</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 03:16:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288079.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Jun 2011 21:59:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 21:59:51 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe einen vector&lt;int&gt;, der eine Zahl repräsentieren soll. Die &quot;Ziffern&quot; sind in umgekehrter Reihenfolge angeordnet, sodass an das Ende des vectors beliebig viele Nullen angehangen werden können.<br />
Gibt es eine Standardlösung, alle Nullen am Ende des vectors besonders elegant und effizient mit einem Algorithmus aus der STL zu löschen?<br />
Mein Ansatz sähe irgendwie so aus:</p>
<pre><code class="language-cpp">bool pred(const int&amp; i)
{
    return i != 0;
}
//...
std::vector&lt;int&gt; v;
v.erase(find_if(v.rbegin(), v.rend(), pred), v.end());
</code></pre>
<p>Allerdings kompiliert das nicht, da find_if nicht mit reverse_iteratoren arbeiten kann. Wie würdet ihr das Problem lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076081</guid><dc:creator><![CDATA[DeletePlox]]></dc:creator><pubDate>Thu, 09 Jun 2011 21:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:09:44 GMT]]></title><description><![CDATA[<p>Wer sagt, daß find_if() nicht mit reverse_iteratoren arbeiten kann? Der schluckt alles, was sich inkrementieren und dereferenzieren lässt. Ein Problem könnte es sein, daß erase() einen normalen Iterator erwartet - aber dagegen hilft reverse_iterator::base().</p>
<p>Edit: Und so sieht das in der Praxis aus: <a href="http://ideone.com/FTnZ9" rel="nofollow">http://ideone.com/FTnZ9</a> <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/2076082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076082</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:09:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 23:05:41 GMT]]></title><description><![CDATA[<p>Nur mal eine kleine noob Frage: Was spricht gegen</p>
<pre><code class="language-cpp">void del_vec(std::vector&lt;int&gt;&amp; vec)
{
  while (vec.size() &amp;&amp; !vec[vec.size() - 1])
    vec.pop_back();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076084</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 09 Jun 2011 23:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:13:53 GMT]]></title><description><![CDATA[<p>Erstmal danke für die schnelle Antwort!</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Nur mal eine kleine noob Frage: Was spricht gegen [...]</p>
</blockquote>
<p>Hm ich wollte mich hier an die Grundsätze aus Scott Meyers &quot;Effective STL&quot; halten, wo es heißt:<br />
1. &quot;Prefer algorithm calls to hand-written loops&quot;<br />
2. &quot;Prefer range member functions to their single-element counterparts&quot;<br />
Obwohl deine Lösung auch recht elegant aussieht... Ich weis nicht. Welche Version soll ich denn nun nehmen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076086</guid><dc:creator><![CDATA[DeletePlox]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:23:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Prefer algorithm calls to hand-written loops</p>
</blockquote>
<p>Kann ich nicht so ganz nachvollziehen, ich finde Schleifen kann man besser lesen und langsamer werden die wohl auch nicht sein. Aber gut, der Scott Meyers wird schon wissen was er schreibt, vielleicht erklärt das ja noch jemand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076090</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:23:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:31:42 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<blockquote>
<p>Prefer algorithm calls to hand-written loops</p>
</blockquote>
<p>Kann ich nicht so ganz nachvollziehen, ich finde Schleifen kann man besser lesen und langsamer werden die wohl auch nicht sein. Aber gut, der Scott Meyers wird schon wissen was er schreibt, vielleicht erklärt das ja noch jemand.</p>
</blockquote>
<p>Ist Quatsch. Wird mit range based for loops bereinigt. Schätze 5 bis 7 Jahre wird's dauern.</p>
<p>Lamdas werden für noch ein wenig Performance-Steigerung führen bei manchen Datenstrukturen. So müssen Bäume nicht mehr immer gefädelt werden oder Aufwärtszeiger haben. Aber das ist eine andere Geschichte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076091</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:31:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:25:57 GMT]]></title><description><![CDATA[<p>In den Algorithmen wird schon einiges an Optimierungen drinstecken, die du mit einer Schleife nicht so leicht hinbekommst - und der Ansatz muß auch nur einmal die Verwaltungsdaten des vector&lt;&gt;s anfassen.</p>
<p>@Plox: Wie du an meinem edit oben sehen kannst - mit einer leichten Korrektur funktioniert dein Lösungsansatz <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/2076092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076092</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:28:56 GMT]]></title><description><![CDATA[<p>Vorschlag zur Güte:</p>
<pre><code class="language-cpp">v.erase(std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::not_equal_to&lt;int&gt;(), 0)).base(), v.end());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076093</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:33:26 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Vorschlag zur Güte:</p>
<pre><code class="language-cpp">v.erase(std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::not_equal_to&lt;int&gt;(), 0)).base(), v.end());
</code></pre>
</blockquote>
<p>Das halte ich für eine Programmierparodie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076095</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:49:52 GMT]]></title><description><![CDATA[<p>Zugegeben, es ist nicht hübsch, aber ein optimierender Compiler dürfte gut damit arbeiten können. Im Vergleich zur push_back-Schleife erwarte ich einen Performancegewinn schlicht dadurch, dass nicht für jedes Element die Verwaltungsinformationen des vectors aktualisiert werden müssen (dafür müsste ein Optimierer schon sehr klug sein), und so ist es, wenn einen die Extrafunktion stört, ein gangbarer Weg.</p>
<p>Mit Lambda-Funktionen wäre es natürlich schöner, aber damit warte ich noch, bis der neue Standard verabschiedet und implementiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076098</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:55:32 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Zugegeben, es ist nicht hübsch, aber ein optimierender Compiler dürfte gut damit arbeiten können. Im Vergleich zur push_back-Schleife erwarte ich einen Performancegewinn schlicht dadurch, dass nicht für jedes Element die Verwaltungsinformationen des vectors aktualisiert werden müssen (dafür müsste ein Optimierer schon sehr klug sein), und so ist es, wenn einen die Extrafunktion stört, ein gangbarer Weg.</p>
</blockquote>
<p>Ich habe mit push_back-Schleifen die allerbesten Erfahrungen.<br />
Der pop_back-Schleife würde ich aber auch nicht trauen.</p>
<p>Würde</p>
<pre><code class="language-cpp">v.erase(std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::not_equal_to&lt;int&gt;(), 0)).base(), v.end());
</code></pre>
<p>vielleicht klarer werden, wenn man es in mehrere Zeilen aufteilt?<br />
Mal angenommrn, wir hätten wenigstens auto.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076100</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 22:59:46 GMT]]></title><description><![CDATA[<p>Richtig, richtig, Denkfehler meinerseits; ich meine natürlich pop_back.</p>
<p>Ansonsten kann man das natürlich in</p>
<pre><code class="language-cpp">auto not_zero = std::bind2nd(std::not_equal_to&lt;int&gt;(), 0);
v.erase(std::find_if(v.rbegin(), v.rend(), not_zero).base(), v.end());
</code></pre>
<p>aufteilen, aber wenn man schon bei C++11 ist, geht's auch mit</p>
<pre><code class="language-cpp">v.erase(std::find_if(v.rbegin(), v.rend(), [](int x) { return x != 0; }).base(), v.end());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076101</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 09 Jun 2011 22:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 23:00:10 GMT]]></title><description><![CDATA[<p>Nur mal ne Frage: Wenn die Nullen sowieso schon am Ende des vectors liegen, warum kannst du den vector nicht einfach entsprechend verkleinern und fertig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076102</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 09 Jun 2011 23:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 23:05:58 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Ansonsten kann man das natürlich in</p>
<pre><code class="language-cpp">auto not_zero = std::bind2nd(std::not_equal_to&lt;int&gt;(), 0);
v.erase(std::find_if(v.rbegin(), v.rend(), not_zero).base(), v.end());
</code></pre>
<p>aufteilen</p>
</blockquote>
<p>Könnte man nicht auch die Position der ersten 0 oder der letzten nicht-0 oder der letzen von hinten gezählten 0 als Zwischenergebnis nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076105</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jun 2011 23:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 23:10:52 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Nur mal ne Frage: Wenn die Nullen sowieso schon am Ende des vectors liegen, warum kannst du den vector nicht einfach entsprechend verkleinern und fertig?</p>
</blockquote>
<p>Weil ich ja wissen um, um wie viel der vector verkleinert werden muss aka wie viele Nullen sich am Ende befinden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076106</guid><dc:creator><![CDATA[DeletePlox]]></dc:creator><pubDate>Thu, 09 Jun 2011 23:10:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 23:13:50 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Du kannst als Zwischenergebnis nehmen, wozu du lustig bist.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a>: Etwa</p>
<pre><code class="language-cpp">v.resize(std::distance(v.begin(), std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::not_equal_to&lt;int&gt;(), 0)).base()));
</code></pre>
<p>? Klar, das geht auch. Volkard wird es aber wahrscheinlich aus den gleichen Gründen für eine Parodie halten. <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/2076108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076108</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 09 Jun 2011 23:13:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Thu, 09 Jun 2011 23:45:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">boost::algorithm::trim_right_if( v, std::bind2nd( std::equal_to&lt;int&gt;(), 0 ) );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076113</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 09 Jun 2011 23:45:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 01:34:47 GMT]]></title><description><![CDATA[<p>Ihr macht wieder alles reichlich kompliziert...</p>
<p>Ich würde das ohne zu überlegen sofort so (ähnlich) schreiben wie cooky451:</p>
<pre><code class="language-cpp">while (!vec.empty() &amp;&amp; vec.back() == 0)
        vec.pop_back();
</code></pre>
<p>Bzw. wenn schon mit Boost, dann gleich so:</p>
<pre><code class="language-cpp">boost::trim_right_if(v, boost::lambda::_1 == 0);
</code></pre>
<p>Oder so:</p>
<pre><code class="language-cpp">boost::trim_right_if(v, [](int i) {return i == 0;} );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076122</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Jun 2011 01:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 01:44:36 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Der pop_back-Schleife würde ich aber auch nicht trauen.</p>
</blockquote>
<p>Wieso nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076123</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Jun 2011 01:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 06:25:47 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Der pop_back-Schleife würde ich aber auch nicht trauen.</p>
</blockquote>
<p>Wieso nicht?</p>
</blockquote>
<p>Weil ich viele push_back-Schleifen geschrieben habe und alles war gut. Aber noch nie eine pop_back-Schleife. Darum fühlt sich die für mich komisch an. Und das &amp;&amp; in der Laufbedingung scheint mir dann zu einem doppelten Test in der Hauptschleife zu führen, der in find_if nicht steckt.<br />
Andererseits, wenn es typischerweise wenige oder gar keine Nullen sind, drängt sich mir die pop_back-Schleife doch auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076137</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 10 Jun 2011 06:25:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 06:02:25 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">v.resize(std::distance(v.begin(), std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::not_equal_to&lt;int&gt;(), 0)).base()));
</code></pre>
<p>? Klar, das geht auch. Volkard wird es aber wahrscheinlich aus den gleichen Gründen für eine Parodie halten. <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>
</blockquote>
<p>Jupp. Weil es drei Aufrufe sind, die nacheinander geschehen und das Ergebnis sukzessive aufbauen.</p>
<pre><code class="language-cpp">auto positon_der_ersten_null_am_ende=std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::not_equal_to&lt;int&gt;(), 0)).base();
    auto anzahl_der_nicht_nullen_am_anfang=std::distance(v.begin(),positon_der_ersten_null_am_ende);
    v.resize(anzahl_der_nicht_nullen_am_anfang);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076139</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 10 Jun 2011 06:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 12:43:54 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Der pop_back-Schleife würde ich aber auch nicht trauen.</p>
</blockquote>
<p>Wieso nicht?</p>
</blockquote>
<p>Weil ich viele push_back-Schleifen geschrieben habe und alles war gut. Aber noch nie eine pop_back-Schleife. Darum fühlt sich die für mich komisch an. Und das &amp;&amp; in der Laufbedingung scheint mir dann zu einem doppelten Test in der Hauptschleife zu führen, der in find_if nicht steckt.<br />
Andererseits, wenn es typischerweise wenige oder gar keine Nullen sind, drängt sich mir die pop_back-Schleife doch auf.</p>
</blockquote>
<p>Ich gehe davon aus dass<br />
a) der Code der pop_back() Schleife sowieso nahezu ideal wird (wieso sollte es da zu einem doppelten Test kommen - .back() ist ja unchecked)<br />
und<br />
b) es völlig egal wäre, selbst wenn die Schleife 10x so lange brauchen würde wie optimal möglich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076346</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Jun 2011 12:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 13:12:05 GMT]]></title><description><![CDATA[<p>Also ab ca. 50,000,000 kann man einen deutlichen Unterschied messen (52 zu 70 ms). Aber ob so viele Nullen jetzt realistisch sind..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076371</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 10 Jun 2011 13:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 14:07:21 GMT]]></title><description><![CDATA[<p>Hier noch ein Beispiel für C++0X - läuft so auch auf VC++ 2010</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; v;

...

auto r = std::find_if(v.rbegin(), v.rend(), [](int t){return t!=0;});
auto new_size = std::distance(v.begin(), r.base());
v.resize(new_size);
</code></pre>
<p>Mit bindgedingens finde ich das irgendwie unleserlicher. Aber das ist nur mein persönlicher Eindruck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076413</guid><dc:creator><![CDATA[tunichtgut]]></dc:creator><pubDate>Fri, 10 Jun 2011 14:07:21 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 16:17:19 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Also ab ca. 50,000,000 kann man einen deutlichen Unterschied messen (52 zu 70 ms). Aber ob so viele Nullen jetzt realistisch sind..</p>
</blockquote>
<p>Unterschied zu welcher Version?<br />
Zu find -&gt; distance -&gt; resize?</p>
<p>ps: bei MSVC wird u.U. auch _SECURE_SCL mit reinspielen, denn wenn _SECURE_SCL == 1 (default), dann ist vector::back() &quot;checked&quot;. Kommt dann drauf an, wie gut MSVC das optimieren kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076453</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Jun 2011 16:17:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Standardlösung für das Löschen gleicher Elemente am vectorende on Fri, 10 Jun 2011 16:52:07 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Unterschied zu welcher Version?</p>
</blockquote>
<p>Schleife (egal welche) gegen</p>
<blockquote>
<pre><code class="language-cpp">v.erase(std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::not_equal_to&lt;int&gt;(), 0)).base(), v.end());
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2076482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076482</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 10 Jun 2011 16:52:07 GMT</pubDate></item></channel></rss>