<?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 zur Listen und Elementenverteilung]]></title><description><![CDATA[<p>Hi,<br />
wie sieht eine Funktion in C++ aus, die eine Liste von Objekten (eigentlich sind diese Zeiger) durchliest und nach einer speizifischen Eigenschaft verteilt die Elemente in 2 anderen Listen. D.h. wir haben eine grosse Liste. Manche Elemente sollen in eine andere Liste verschiebt/kopiert werden. Die andere Elemente, die diese Eigenschaft nicht besitzen, sollen in eine andere Liste kopiert. Ich soll besser STL benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138909/frage-zur-listen-und-elementenverteilung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 07:15:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138909.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Mar 2006 10:45:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Listen und Elementenverteilung on Thu, 02 Mar 2006 10:45:43 GMT]]></title><description><![CDATA[<p>Hi,<br />
wie sieht eine Funktion in C++ aus, die eine Liste von Objekten (eigentlich sind diese Zeiger) durchliest und nach einer speizifischen Eigenschaft verteilt die Elemente in 2 anderen Listen. D.h. wir haben eine grosse Liste. Manche Elemente sollen in eine andere Liste verschiebt/kopiert werden. Die andere Elemente, die diese Eigenschaft nicht besitzen, sollen in eine andere Liste kopiert. Ich soll besser STL benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006588</guid><dc:creator><![CDATA[khalderon]]></dc:creator><pubDate>Thu, 02 Mar 2006 10:45:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Listen und Elementenverteilung on Thu, 02 Mar 2006 11:01:58 GMT]]></title><description><![CDATA[<p>Nur ein Ansatz - verstehen und anpassen mußt du ihn schon selber:</p>
<pre><code class="language-cpp">list&lt;data_t&gt; indata,out1,out2;
//fülle indata mit allen betrachteten Objekten

while(!indata.empty())
  if(isok(indata.front())
    out1.splice(out1.end(),indata,indata.begin());
  else
    out2.splice(out2.end(),indata,indata.begin());
</code></pre>
<p>(splice() gibt es nur für list - das hängt einzelne Elemente zwischen verschiedenen Listen um)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006608</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 02 Mar 2006 11:01:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Listen und Elementenverteilung on Thu, 02 Mar 2006 11:05:01 GMT]]></title><description><![CDATA[<p>Wenn deine Liste STL-kompatibel ist, also entsprechende Iteratoren anbietet, kannst du den partition-Algorithmus aus der STL anwenden. Die Elemente bleiben dabei allerdings in derselben Liste, nur dass die, die die Eigenschaft haben, nach vorne sortiert werden. Einen Algorithmus, der zwei neue Listen erzeugt, müsstest du selbst schreiben, das ist aber trivial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006614</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 02 Mar 2006 11:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Listen und Elementenverteilung on Thu, 02 Mar 2006 20:10:05 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Einen Algorithmus, der zwei neue Listen erzeugt, müsstest du selbst schreiben, das ist aber trivial.</p>
</blockquote>
<p>Muss man nicht. Die Methode list::splice kann auch das.</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;    // partition
#include &lt;iostream&gt;
#include &lt;iterator&gt;     // back_inserter, ostream_iterator
#include &lt;list&gt;

struct Eigenschaft
{
    bool operator()( int x ) const
    {
        return x % 3 == 0  ||  x % 7 == 0; // nur als Beispiel
    }
};

int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
    std::list&lt; int &gt; l1;
    std::copy( arr, arr + sizeof( arr )/sizeof( *arr ), std::back_inserter( l1 ) );

    // --   hier geht's los
    std::list&lt; int &gt; l2;
    l2.splice( l2.end(), l1, l1.begin(), std::partition( l1.begin(), l1.end(), Eigenschaft() ) );

    // --   zur Kontrolle alles ausgeben
    std::copy( l1.begin(), l1.end(), 
        std::ostream_iterator&lt; int &gt;( std::cout &lt;&lt; &quot;Die eine Liste: &quot;, &quot; &quot;) );
    std::cout &lt;&lt; std::endl;
    std::copy( l2.begin(), l2.end(), 
        std::ostream_iterator&lt; int &gt;( std::cout &lt;&lt; &quot;Die andere (durch 3 oder 7 teilbar): &quot;, &quot; &quot;) );
    std::cout &lt;&lt; std::endl;

    return 0;
}
</code></pre>
<p>'l1' wird aufgeteilt in 'l2', welches nur die Elemente mit der gewünschten Eigenschaft enthält (hier beispielhaft die Teilbarkeit durch 3 oder 7), und in 'l1' bleiben die anderen zurück.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1007110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1007110</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 02 Mar 2006 20:10:05 GMT</pubDate></item></channel></rss>