<?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[Vektor sortieren]]></title><description><![CDATA[<p>Hallo!</p>
<p>Angenommen, ich will die ersten drei Elemente eines STL-Vektors sortieren. Dann geht das offenbar nicht mit</p>
<pre><code class="language-cpp">vector&lt;int&gt; vInts;
sort(vInts.begin(),vInts.begin()+3);
</code></pre>
<p>sondern braucht:</p>
<pre><code class="language-cpp">vector&lt;int&gt; vInts;
vector&lt;int&gt;::iterator stop=vInts.begin();
advance(stop,3);
sort(vInts.begin(),stop);
</code></pre>
<p>Das funktioniert, aber gibts da eine schönere Lösung ähnlich dem oberen Zweizeiler?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279338/vektor-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 16:22:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279338.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Dec 2010 21:10:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektor sortieren on Thu, 23 Dec 2010 21:10:06 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Angenommen, ich will die ersten drei Elemente eines STL-Vektors sortieren. Dann geht das offenbar nicht mit</p>
<pre><code class="language-cpp">vector&lt;int&gt; vInts;
sort(vInts.begin(),vInts.begin()+3);
</code></pre>
<p>sondern braucht:</p>
<pre><code class="language-cpp">vector&lt;int&gt; vInts;
vector&lt;int&gt;::iterator stop=vInts.begin();
advance(stop,3);
sort(vInts.begin(),stop);
</code></pre>
<p>Das funktioniert, aber gibts da eine schönere Lösung ähnlich dem oberen Zweizeiler?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998462</guid><dc:creator><![CDATA[sort]]></dc:creator><pubDate>Thu, 23 Dec 2010 21:10:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor sortieren on Thu, 23 Dec 2010 21:27:02 GMT]]></title><description><![CDATA[<p>Warum sollte das erste nicht gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998472</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 23 Dec 2010 21:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor sortieren on Thu, 23 Dec 2010 21:30:28 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Warum sollte das erste nicht gehen?</p>
</blockquote>
<p>Aufregend, jetzt gehts. Ich sitz wohl schon zu lange an der Tastatur heute, sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998474</guid><dc:creator><![CDATA[sort]]></dc:creator><pubDate>Thu, 23 Dec 2010 21:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor sortieren on Thu, 23 Dec 2010 22:02:56 GMT]]></title><description><![CDATA[<p>Wozu ist das <code>advance</code> eigentlich gut? Ich wäre nie auf die Idee gekommen etwas anderes zu nutzen als <code>Iterator + N</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998485</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Thu, 23 Dec 2010 22:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor sortieren on Thu, 23 Dec 2010 22:11:25 GMT]]></title><description><![CDATA[<p>Nick Unbekannt schrieb:</p>
<blockquote>
<p>Wozu ist das <code>advance</code> eigentlich gut? Ich wäre nie auf die Idee gekommen etwas anderes zu nutzen als <code>Iterator + N</code> .</p>
</blockquote>
<p>Das brauchst Du bei einem Iterator ohne Random Access, etwa von einem Set. Dort müßest Du sonst sagen: for(unsigned i=0;i&lt;3;++i) ++it;</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998487</guid><dc:creator><![CDATA[sort]]></dc:creator><pubDate>Thu, 23 Dec 2010 22:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor sortieren on Thu, 23 Dec 2010 22:18:43 GMT]]></title><description><![CDATA[<p>Hab ich ehrlich gesagt noch nie benötigt, ich mache meist nur Einer-Schritte, aber laut diesem Auszug von Stack-Overflow ist es auch bei einem Set so angedacht. Ich seh jetzt auch keinen Grund warum nicht. Auch kann ich mir nicht erklären, warum der Additions-Operator nicht einfach intern advance aufruft. Die Parameter sind doch bei beiden Aufrufen die gleichen?</p>
<p><a href="http://stackoverflow.com/questions/671423/c-stl-vectors-get-iterator-from-index" rel="nofollow">http://stackoverflow.com/questions/671423/c-stl-vectors-get-iterator-from-index</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998488</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Thu, 23 Dec 2010 22:18:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor sortieren on Thu, 23 Dec 2010 22:52:40 GMT]]></title><description><![CDATA[<p><code>std::advance</code> brauchst du, wenn du unabhängig vom Iterator Typ, generisch inkrementieren willst. Bei einer Liste braucht das O(n) und bei einem <code>std::vector</code> geht das dann in O(1).</p>
<pre><code class="language-cpp">typedef std::vector&lt;int&gt; my_list;
//...

void foo()
{
  my_list l;
  //...
  my_list::iterator it = l.begin();
  std::advance(it,5);
}
</code></pre>
<p>und irgendwann merkst du, dass da besser doch eine <code>list</code> und kein <code>vector</code> wäre und dann musst du nur eine Zeile ändern (die mit dem typedef). Ansonsten müsstest du das inkrement um 5 in einer loop machen.</p>
<p>Man hätte natürlich das auch gleich im +-Operator implementieren können. Ich weiss nicht warum sie das so gemacht haben, aber ich finde es so auch natürlicher, weil sonst ein vermeindliche Addition plötzlich eben doch recht teuer wird und man merkt es gar nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998494</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 23 Dec 2010 22:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor sortieren on Fri, 24 Dec 2010 00:24:01 GMT]]></title><description><![CDATA[<p>Nick Unbekannt schrieb:</p>
<blockquote>
<p>Hab ich ehrlich gesagt noch nie benötigt, ich mache meist nur Einer-Schritte, aber laut diesem Auszug von Stack-Overflow ist es auch bei einem Set so angedacht. Ich seh jetzt auch keinen Grund warum nicht. Auch kann ich mir nicht erklären, warum der Additions-Operator nicht einfach intern advance aufruft. Die Parameter sind doch bei beiden Aufrufen die gleichen?</p>
<p><a href="http://stackoverflow.com/questions/671423/c-stl-vectors-get-iterator-from-index" rel="nofollow">http://stackoverflow.com/questions/671423/c-stl-vectors-get-iterator-from-index</a></p>
</blockquote>
<p>Die STL folgt weitgehend dem Prinzip dass es für Dinge die &quot;billig&quot; sind &quot;direkte&quot; Funktionen/Operatoren gibt, und für Dinge die &quot;teuer&quot; sind nix bzw. Hilfsfunktionen.</p>
<p>Beispielsweise hat ein &quot;std::vector&quot; kein &quot;push_front&quot;, obwohl man es problemlos machen kann (über &quot;insert&quot; halt). Nur ist es &quot;teuer&quot;, und deswegen gibt's die &quot;direkte&quot; Funktion &quot;push_front&quot; eben nicht.</p>
<p>Ob es &quot;+&quot; für Iteratoren gibt folgt dem selben Prinzip.</p>
<p>Bei Random-Access Operatoren ist &quot;+&quot; billig, also gibt es &quot;+&quot;.<br />
Und für Nicht-Random-Access Operatoren gibt es &quot;advance&quot;.</p>
<p>Das schöne daran ist, dass man &quot;advance&quot; auch z.B. in Templates bedenkenlos verwenden kann, weil es entsprechend spezialisiert ist.<br />
D.h. für Random-Access Operatoren wird <em>nicht</em> sinnloser Weise in einer Schleife &quot;++&quot; aufgerufen.</p>
<p>Der Hintergedanke ist vermutlich: wenn etwas einfach geht, macht man es einfach, ohne weiter darüber nachzudenken. Bei &quot;billigen&quot; Operationen ist das auch OK. Daher sollten &quot;billige&quot; Operationen einfach sein - weil warum unnötig kompliziert.</p>
<p>Und wenn etwas doch &quot;unnötig&quot; kompliziert ist, dann fragt man sich hoffentlich <em>warum</em>. Wenn man dann nachforscht kommt man drauf dass es kompliziert ist, weil es eben nicht &quot;billig&quot; ist. Bzw. wenn man bereits weiss warum, wird man hoffentlich aufmerksam, und überlegt sich ob man das Problem nicht anders lösen kann, mit einfacheren und &quot;billigeren&quot; Operationen.</p>
<p>Ist IMO ziemlich logisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998508</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 24 Dec 2010 00:24:01 GMT</pubDate></item></channel></rss>