<?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[Problem mit splice()]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>habe ungefähr so eine Situation:</p>
<pre><code class="language-cpp">//  li: 1 2 3 4 5 6 7 8 9 10
list&lt;int&gt; li;
for (unsigned int i = 1 ; i &lt;= 10 ; i++)
    li.push_back(i);

//  Bereich: range_begin = 4
//           range_end   = 8
list&lt;int&gt;::iterator range_begin = li.begin(),
                    range_end   = li.end();
for (unsigned int i = 0 ; i &lt; 3 ; i++) {
    range_begin++;
    range_end--;
}

//  Alle Werte aus [range_begin,range_end) die größer als 5 sind
//  an den Anfang [von range_begin,range_end) verschieben
for (list&lt;int&gt;::iterator i = range_begin ; i != range_end ; i++)
    li.splice(range_begin, li, i);

//  li: 1 2 3 6 7 4 5 8 9 10
</code></pre>
<p>Am Ende diesen Abschnittes zeigt (wie zu erwarten) der Iterator <code>range_begin</code> immer noch auf 4.<br />
Die Anzahl der Elemente in <code>[range_begin,range_end)</code> hat sich also verringert.<br />
Die Größe sollte aber eigentlich gleich bleiben, d.h. range_begin soll hier auf die sechs verweisen...<br />
Lässt sich das realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236561/problem-mit-splice</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 20:19:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236561.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Mar 2009 23:19:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit splice() on Mon, 16 Mar 2009 23:19:25 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>habe ungefähr so eine Situation:</p>
<pre><code class="language-cpp">//  li: 1 2 3 4 5 6 7 8 9 10
list&lt;int&gt; li;
for (unsigned int i = 1 ; i &lt;= 10 ; i++)
    li.push_back(i);

//  Bereich: range_begin = 4
//           range_end   = 8
list&lt;int&gt;::iterator range_begin = li.begin(),
                    range_end   = li.end();
for (unsigned int i = 0 ; i &lt; 3 ; i++) {
    range_begin++;
    range_end--;
}

//  Alle Werte aus [range_begin,range_end) die größer als 5 sind
//  an den Anfang [von range_begin,range_end) verschieben
for (list&lt;int&gt;::iterator i = range_begin ; i != range_end ; i++)
    li.splice(range_begin, li, i);

//  li: 1 2 3 6 7 4 5 8 9 10
</code></pre>
<p>Am Ende diesen Abschnittes zeigt (wie zu erwarten) der Iterator <code>range_begin</code> immer noch auf 4.<br />
Die Anzahl der Elemente in <code>[range_begin,range_end)</code> hat sich also verringert.<br />
Die Größe sollte aber eigentlich gleich bleiben, d.h. range_begin soll hier auf die sechs verweisen...<br />
Lässt sich das realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681216</guid><dc:creator><![CDATA[Listeniteratoren]]></dc:creator><pubDate>Mon, 16 Mar 2009 23:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit splice() on Tue, 17 Mar 2009 19:54:21 GMT]]></title><description><![CDATA[<p>Warum nicht <code>std::partition()</code> ? Oder <code>std::stable_partition()</code> , falls die Originalreihenfolge der Elemente innerhalb der gleichen Teilsequenz erhalten werden soll?</p>
<pre><code class="language-cpp">#include &lt;list&gt;
#include &lt;algorithm&gt;

bool GreaterThan5(int Value)
{
	return Value &gt; 5;
}

int main()
{
	std::list&lt;int&gt; li; 
	for (unsigned int i = 1 ; i &lt;= 10 ; i++) 
		li.push_back(i);

	std::partition(li.begin(), li.end(), GreaterThan5);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1681802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681802</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 17 Mar 2009 19:54:21 GMT</pubDate></item></channel></rss>