<?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[Löschen in einer einfach verketteten Liste]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Methode zum Löschen eines übergebenen Elements schreiben. Die Methode soll alle Elemente in der Liste, die dem übergebenen Element gleich sind, löschen.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class List {
    class Node {
    public:
        Node(const T&amp; crT, Node* pNext) : m_T(crT), m_pNext(pNext) {}
        T m_T;
        Node* m_pNext;
    };
public:
    List() : m_pHead(0) {}
    void insert(const T&amp; crT) { m_pHead = new Node(crT,m_pHead); }
    void deleteIt(const T&amp; crT) {
        Node* vorgaenger = 0;
        for(Node* elem = m_pHead; elem != 0; elem = elem-&gt;m_pNext) {
            if(elem-&gt;m_pNext != 0 &amp; elem-&gt;m_pNext-&gt;m_T == crT) {
                    vorgaenger = elem;
            }
            if(elem-&gt;m_T == crT) {
                Node* tmpN = elem;
                if(tmpN == m_pHead) {
                    m_pHead = m_pHead-&gt;m_pNext;
                }
                if(vorgaenger != 0)
                    vorgaenger-&gt;m_pNext = elem;
                delete tmpN;
            }
        }
    }
    void print() {
        for(Node* tmp = m_pHead; tmp != 0; tmp = tmp-&gt;m_pNext)
            cout &lt;&lt; tmp-&gt;m_T &lt;&lt; &quot; &quot;;
        cout &lt;&lt; endl;
    }
private:
    Node* m_pHead;
};
int main() {
    cout &lt;&lt; &quot;Einfach verkettete Liste&quot; &lt;&lt; endl;
    List&lt;int&gt; l;
    for(int i = 0; i &lt; 5; ++i)
        l.insert(i);
    l.print();
    l.insert(3);
    l.print();
    l.deleteIt(3);
    l.print();
    system(&quot;pause&quot;);
    return 0;
}
</code></pre>
<p>Allerdings stürzt mein Programm ab, wenn deleteIt(3) aufgerufen wurde.<br />
Ich denke es hängt mit dem Aufruf von delete tmpN; zusammen, saß jetzt aber bestimmt schon zwei Stunden davor und kann es mir immer noch nicht richtig erklären.</p>
<p>Kann mir da einer helfen? Bin ich schon auf dem richtigen Weg? Was muss ich anders machen, damit das Löschen funktioniert?</p>
<p>Gruss vnmr</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259781/löschen-in-einer-einfach-verketteten-liste</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 17:14:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259781.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jan 2010 16:34:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 16:34:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Methode zum Löschen eines übergebenen Elements schreiben. Die Methode soll alle Elemente in der Liste, die dem übergebenen Element gleich sind, löschen.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class List {
    class Node {
    public:
        Node(const T&amp; crT, Node* pNext) : m_T(crT), m_pNext(pNext) {}
        T m_T;
        Node* m_pNext;
    };
public:
    List() : m_pHead(0) {}
    void insert(const T&amp; crT) { m_pHead = new Node(crT,m_pHead); }
    void deleteIt(const T&amp; crT) {
        Node* vorgaenger = 0;
        for(Node* elem = m_pHead; elem != 0; elem = elem-&gt;m_pNext) {
            if(elem-&gt;m_pNext != 0 &amp; elem-&gt;m_pNext-&gt;m_T == crT) {
                    vorgaenger = elem;
            }
            if(elem-&gt;m_T == crT) {
                Node* tmpN = elem;
                if(tmpN == m_pHead) {
                    m_pHead = m_pHead-&gt;m_pNext;
                }
                if(vorgaenger != 0)
                    vorgaenger-&gt;m_pNext = elem;
                delete tmpN;
            }
        }
    }
    void print() {
        for(Node* tmp = m_pHead; tmp != 0; tmp = tmp-&gt;m_pNext)
            cout &lt;&lt; tmp-&gt;m_T &lt;&lt; &quot; &quot;;
        cout &lt;&lt; endl;
    }
private:
    Node* m_pHead;
};
int main() {
    cout &lt;&lt; &quot;Einfach verkettete Liste&quot; &lt;&lt; endl;
    List&lt;int&gt; l;
    for(int i = 0; i &lt; 5; ++i)
        l.insert(i);
    l.print();
    l.insert(3);
    l.print();
    l.deleteIt(3);
    l.print();
    system(&quot;pause&quot;);
    return 0;
}
</code></pre>
<p>Allerdings stürzt mein Programm ab, wenn deleteIt(3) aufgerufen wurde.<br />
Ich denke es hängt mit dem Aufruf von delete tmpN; zusammen, saß jetzt aber bestimmt schon zwei Stunden davor und kann es mir immer noch nicht richtig erklären.</p>
<p>Kann mir da einer helfen? Bin ich schon auf dem richtigen Weg? Was muss ich anders machen, damit das Löschen funktioniert?</p>
<p>Gruss vnmr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1845854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1845854</guid><dc:creator><![CDATA[vnmr]]></dc:creator><pubDate>Wed, 27 Jan 2010 16:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 16:41:12 GMT]]></title><description><![CDATA[<p>Weil du, wenn du das erste Element löschen willst, nur m_pHead neu zuweißt, nicht aber 'elem'. Und da du 'elem' löschst bekommst du beim nächsten Schleifendurchlauf ein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1845856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1845856</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 27 Jan 2010 16:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 16:47:17 GMT]]></title><description><![CDATA[<ol>
<li>
<p>if(elem-&gt;m_pNext != 0 &amp; elem-&gt;m_pNext-&gt;m_T == crT)<br />
Das &quot;&amp;&quot; ist hier ein großer Fehler!<br />
Du willst<br />
if(elem-&gt;m_pNext &amp;&amp; elem-&gt;m_pNext-&gt;m_T == crT)</p>
</li>
<li>
<p>Warum versetzt du m_pHead! Das ist dein Listen Kopf (dein root-Element, oder?)<br />
Du modellierst eine einfach verkettete Liste, das heißt du hast keinen Zugriff mehr auf deinen Vorgänger. Sobald du m_pHead also auf ein anderes Element zeigen lässt hast du ein riesen Problem!</p>
</li>
<li>
<p>tmpN zeigt immer noch auf eine gültige und verwendete Node!</p>
</li>
</ol>
<pre><code class="language-cpp">Node* tmpN = elem;
if(tmpN == m_pHead) {
  m_pHead = m_pHead-&gt;m_pNext;
}
if(vorgaenger != 0)
  vorgaenger-&gt;m_pNext = elem; // tmpN zeigt immer noch auf elem
delete tmpN;  // vorgaenger-&gt;elem ist jetzt im Nirvana...
</code></pre>
<p>Ich würde dir raten, erst mit Stift und Papier zu skizzieren, was passiert wenn du ein Element löschst.<br />
Außerdem würde ich raten dir eine eigene private Methode &quot;findParentNode(const T&amp;)&quot; zu basteln, die dir das parent eines passenden Items zurückliefert. Das kannst du verwenden für insertBefore, insertAfter, delete, find, usw. dann wird dein delete gleich viel übersichtlicher!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1845860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1845860</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 27 Jan 2010 16:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 16:49:04 GMT]]></title><description><![CDATA[<p>vnmr schrieb:</p>
<blockquote>
<p>Hallo</p>
</blockquote>
<p>hi^^</p>
<blockquote>
<p>ich möchte eine Methode zum Löschen eines übergebenen Elements schreiben. Die Methode soll alle Elemente in der Liste, die dem übergebenen Element gleich sind, löschen.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class List
{
    struct Node
    {
        Node(const T&amp; crT, Node* pNext)
        :   m_T(crT), m_pNext(pNext)
        {}

        T m_T;
        Node* m_pNext;
    };

    Node* m_pHead;
public:
    List()
    :   m_pHead(0)
    {}

    void insert(const T&amp; crT)
    {
        m_pHead = new Node(crT,m_pHead);
    }

    void deleteIt(const T&amp; crT)
    {
        Node* vorgaenger = 0;

        for(Node* elem = m_pHead; elem != 0; elem = elem-&gt;m_pNext)
        {
            if(elem-&gt;m_pNext != 0 &amp; elem-&gt;m_pNext-&gt;m_T == crT)
            { //hier ist auf jeden fall schon mal ein fehler - nimm das logische und, sonst wird die rechte seite auch ausgewertet, wenn du einen nullzeiger hast!
                    vorgaenger = elem;
            }

            if(elem-&gt;m_T == crT)
            {
                Node* tmpN = elem;

                if(tmpN == m_pHead)
                    m_pHead = m_pHead-&gt;m_pNext;

                if(vorgaenger != 0)
                    vorgaenger-&gt;m_pNext = elem;

                delete tmpN;
            }
        }
    }

    void print()
    {
        for(Node* tmp = m_pHead; tmp != 0; tmp = tmp-&gt;m_pNext)
            cout &lt;&lt; tmp-&gt;m_T &lt;&lt; &quot; &quot;;

        cout &lt;&lt; endl;
    }
};

int main()
{
    cout &lt;&lt; &quot;Einfach verkettete Liste&quot; &lt;&lt; endl;

    List&lt;int&gt; l;

    for(int i = 0; i &lt; 5; ++i)
        l.insert(i);

    l.print();

    l.insert(3);
    l.print();

    l.deleteIt(3);
    l.print();

    system(&quot;pause&quot;);
    return 0;
}
</code></pre>
</blockquote>
<p>Jetzt kann es der Großteil hier denke ich auch besser lesen ;o)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1845862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1845862</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 27 Jan 2010 16:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 16:52:26 GMT]]></title><description><![CDATA[<p>Destruktor, Kopierkonstruktor und Zuweisungsoperator fehlen, siehe <a href="http://de.wikipedia.org/wiki/Dreierregel_(C%2B%2B)" rel="nofollow">Dreierregel</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1845865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1845865</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 27 Jan 2010 16:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 17:24:35 GMT]]></title><description><![CDATA[<p>Vielen Dank erstmal für die Antworten.</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Destruktor, Kopierkonstruktor und Zuweisungsoperator fehlen, siehe <a href="http://de.wikipedia.org/wiki/Dreierregel_(C%2B%2B)" rel="nofollow">Dreierregel</a>.</p>
</blockquote>
<p>Ich möchte es gerade ohne die Dreierregel realisieren.</p>
<p>Ich habe jetzt erstmal das logische Und genommen. Jetzt wird wenigstens nach dem deleteIt was ausgegeben.</p>
<p>l'abra d'or schrieb:</p>
<blockquote>
<ol start="2">
<li>Warum versetzt du m_pHead! Das ist dein Listen Kopf (dein root-Element, oder?)<br />
Du modellierst eine einfach verkettete Liste, das heißt du hast keinen Zugriff mehr auf deinen Vorgänger. Sobald du m_pHead also auf ein anderes Element zeigen lässt hast du ein riesen Problem!</li>
</ol>
</blockquote>
<p>Ich wollte den Fall implementieren, dass wenn elem auf das erste Element zeigt (m_pHead), der Head um einen weitergesetzt wird und dann gelöscht wird. Oder ist das überflüssig?</p>
<blockquote>
<ol start="3">
<li>tmpN zeigt immer noch auf eine gültige und verwendete Node!</li>
</ol>
<pre><code class="language-cpp">Node* tmpN = elem;
if(tmpN == m_pHead) {
  m_pHead = m_pHead-&gt;m_pNext;
}
if(vorgaenger != 0)
  vorgaenger-&gt;m_pNext = elem; // tmpN zeigt immer noch auf elem
delete tmpN;  // vorgaenger-&gt;elem ist jetzt im Nirvana...
</code></pre>
</blockquote>
<p>Da hast du recht, allerdings hab ich keine Ahnung, wie ich das anders implementieren kann.</p>
<p>Inzwischen ist es so, dass die Ausagbe nach dem deleteIt(3); folgendermaßen aussieht: 4 212856 2 1 0<br />
Also das Umhängen von m_pHead scheint ja zu funktionieren. Allerdings funktioniert dann das umhängen eines Elements mitten in der Liste noch nicht, wie man an dem komischen int-Wert sieht. Was muss ich denn machen, um diesen Fall richtig behandeln zu können? Ich kann es mir nicht erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1845884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1845884</guid><dc:creator><![CDATA[vnmr]]></dc:creator><pubDate>Wed, 27 Jan 2010 17:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 18:24:07 GMT]]></title><description><![CDATA[<p>vnmr schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Destruktor, Kopierkonstruktor und Zuweisungsoperator fehlen, siehe <a href="http://de.wikipedia.org/wiki/Dreierregel_(C%2B%2B)" rel="nofollow">Dreierregel</a>.</p>
</blockquote>
<p>Ich möchte es gerade ohne die Dreierregel realisieren.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Wenn Du keine Lust hast, Copy-Ctor und Assignment-Operator zu implementieren, dann verhindere wenigstens diese Operationen.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class forwardlist : boost::noncopyable
{
  ...
</code></pre>
<p>Einen Destruktor solltest Du Dir schon bauen. So ein Objekt, was selbst andere Objekte per new erzeugt und &quot;<em>speichert</em>&quot; aber keinen benutzerdefinierten, aufräumenden Destruktor hat, ist einfach eine Frechheit und verstößt gegen common practice. Entweder, Du überlässt dem Nutzer die Speicherverwaltung (siehe Boost's Intrusive Containers) oder Du regelst das komplett selbst (wie alle anderen Standard-Container). Aber bitte nicht so 'ne halbe Sache. Das gibt nur Chaos.</p>
<p>Wenn's um das Löschen von Elementen in einer verketteten Liste geht, sind Zeiger auf Zeiger recht praktisch. Damit spart man sich den Sonderfall mit dem Anfang der Liste. Pseudo-Code</p>
<pre><code class="language-cpp">void loeschen(Node*&amp; anfang, T const&amp; elem)
{
  Node** pp = &amp;anfang;
  while (*pp) {
    if (**pp == elem) {
      Node* danach = (**pp).next;
      delete *pp;
      *pp = danach;
    } else {
      pp = &amp; (**pp).next;
    }
  }
}
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1845919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1845919</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 27 Jan 2010 18:24:07 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Wed, 27 Jan 2010 21:35:09 GMT]]></title><description><![CDATA[<p>Hallo vnmr,</p>
<p>willkommen im C++-Forum. Du kannst hier noch 'ne Menge lernen.</p>
<p>vnmr schrieb:</p>
<blockquote>
<p>Da hast du recht, allerdings hab ich keine Ahnung, wie ich das anders implementieren kann.</p>
</blockquote>
<p>Deine Liste sollte in etwa so aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cassert&gt;
#include &lt;functional&gt; // std::bind2nd, std::equal_to

template&lt; typename T &gt;
class List
{
    struct Node
    {
        Node( const T&amp; x, Node* next )
            : m_next( next ), m_data( x )
        {}
        Node* m_next;
        T m_data;
    };

public:
    typedef T value_type;
    List() : m_head( 0 ) {}
    ~List()
    {
        erase( &amp;List&lt; T &gt;::all );
    }

    void push_front( const T&amp; x ) // insert steht für das Einfügen in assoziativen Containern
    {
        m_head = new Node( x, m_head );
    }

    void erase( const T&amp; x ) // erase steht für das Löschen von Elementen aus Containern
    {
        erase( std::bind2nd( std::equal_to&lt; T &gt;(), x ) );
    }
    template&lt; typename Pred &gt;
    void erase( Pred pred )
    {
        Node* prev = 0;
        for( Node* nd = m_head; nd; )
        {
            if( pred( nd-&gt;m_data ) )
            {   // Löschbedingung ist erfüllt
                Node* const tmp = nd;
                (prev? prev-&gt;m_next: m_head) = nd-&gt;m_next;
                nd = nd-&gt;m_next; // Wichtig: 'nd' muss vor dem delete auf den nächsten Zeiger gesetzt werden
                delete tmp;
            }
            else
            {
                prev = nd;
                nd = nd-&gt;m_next;
            }
        }
    }

    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, const List&amp; list )
    {
        for( List::Node* nd = list.m_head; nd; nd = nd-&gt;m_next )
            out &lt;&lt; nd-&gt;m_data &lt;&lt; &quot; &quot;;
        return out;
    }

private:
    List( const List&amp; ); // Dreierregel beachten!
    List&amp; operator=( const List&amp; );

    static bool all( const T&amp; ) { return true; }
    // --   Members
    Node* m_head;
};

bool equal167( int x )
{
    return x == 1 || x == 6 || x == 7;
}

int main()
{
    using namespace std;
    {
        List&lt; int &gt; list;
        for( int i = 7; i &gt; 0; --i )
            list.push_front( i );
        cout &lt;&lt; list &lt;&lt; endl;
        list.erase( 6 );
        list.erase( 1 );
        list.erase( 7 );
        cout &lt;&lt; list &lt;&lt; endl;
    }
    {
        List&lt; int &gt; list;
        for( int i = 7; i &gt; 0; --i )
            list.push_front( i );
        cout &lt;&lt; list &lt;&lt; endl;
        list.erase( &amp;equal167 );
        cout &lt;&lt; list &lt;&lt; endl;
    }
    return 0;
}
</code></pre>
<p>Das entspricht dann auch den Anforderungen, die Sebastian mit Recht angemahnt hat.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1846075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1846075</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 27 Jan 2010 21:35:09 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Thu, 28 Jan 2010 10:59:18 GMT]]></title><description><![CDATA[<p>Vielen Dank noch einmal, ich werde mich gleich ransetzen und versuchen das ganze zu verstehen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1846267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1846267</guid><dc:creator><![CDATA[vnmr]]></dc:creator><pubDate>Thu, 28 Jan 2010 10:59:18 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen in einer einfach verketteten Liste on Thu, 28 Jan 2010 13:16:17 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt; typename Pred &gt;
    void erase( Pred pred )
    {
        Node* prev = 0;
        for( Node* nd = m_head; nd; )
        {
            if( pred( nd-&gt;m_data ) )
            {   // Löschbedingung ist erfüllt
                Node* const tmp = nd;
                (prev? prev-&gt;m_next: m_head) = nd-&gt;m_next;
                nd = nd-&gt;m_next; // Wichtig: 'nd' muss vor dem delete auf den nächsten Zeiger gesetzt werden
                delete tmp;
            }
            else
            {
                prev = nd;
                nd = nd-&gt;m_next;
            }
        }
    }
</code></pre>
</blockquote>
<p>Diese Funktion macht immer noch zuviel und wird deshalb unnötig lang und komplex. Im Einzelnen:<br />
- gehe jedes Element durch<br />
- prüfe ob Bedingung erfüllt ist<br />
- wenn ja:<br />
- entferne Node aus Liste<br />
- lösche Node<br />
Ohne ein brauchbares Iteratorkonzept, kann man die ersten beiden Teile nicht sauber trennen, aber jedenfalls die letzten beiden Punkte können isoliert implementiert werden</p>
<pre><code class="language-cpp">Node* remove_single_node( Node*&amp; owner )
    {
        assert( owner != 0 );
        Node* node = owner;
        owner = owner-&gt;m_next;
        return node;
    }
    void erase_single_node( Node*&amp; owner )
    {
        assert( owner != 0 );
        delete remove_single_node( owner );
    }
    template&lt; typename Pred &gt;
    void erase( Pred pred )
    {
        for( Node** nd = &amp;m_head; *nd != 0; )
            if( pred( ( *nd )-&gt;m_data ) )
                erase_single_node( *nd );
            else
                nd = &amp;( *nd )-&gt;m_next;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1846345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1846345</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 28 Jan 2010 13:16:17 GMT</pubDate></item></channel></rss>