<?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[verkettete Liste in C++ mit Iteratoren]]></title><description><![CDATA[<p>Hallo Gemeinde,</p>
<p>mich interessiert weniger, wie das mit der Verkettung funktioniert, sondern wie man &quot;modern&quot; soetwas macht. Ich möchte also sowas machen:</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;list.h&quot;

int main()
{
    List&lt;int&gt; l;
    l.append(0);
    l.append(1);
    List&lt;int&gt;::iterator it    = l.begin();
    List&lt;int&gt;::iterator endit = l.end();
    while ( it != endit )
    {
         std::cout &lt;&lt; *it &lt;&lt; &quot;\n&quot;;
         it = l.next(it);
    }
    return 0;
}
/*
    for ( List&lt;int&gt;::iterator it = l.begin(), endit=l.end();
          it != endit;
          ++it )
         std::cout &lt;&lt; *it &lt;&lt; &quot;\n&quot;;
*/
</code></pre>
<p>Wie man an der Auskommentierung sieht, habe ich es mit der Incremtierung nicht hin gekriegt. Auserdem gibt es noch ein Bug am Ende der Liste, den finde ich aber noch.</p>
<p>Die entsprechende h - Datei sieht folgendermaßen aus:</p>
<pre><code>template &lt;typename T&gt; class List
{
public:
    List()
    {
        _first = _last = 0;
    }
    void append(const T&amp; t)
    {
         T* v = new T(t);
        iterator* i = new iterator;
        i-&gt;_data = v;
        i-&gt;_next = 0;
        if ( _first == 0 )
            _first = i;
        else
            _last-&gt;_next = i;
        _last = i;
    }

    struct iterator
    {
        friend class List&lt;T&gt;;
        iterator()
        {
            _next =  0;
            _data =  0;
        }
        iterator(const iterator&amp; i)
        {        ~iterator()
        {
            delete _data;
            _data = 0;
        }
        T* operator-&gt;() const
        {
            return _data;
        }
        T&amp; operator*() const
        {
            return *_data;
        }
       const bool operator!=(const iterator&amp; i)
        {
            return compare(i) == false;
        }
        const bool operator==(const iterator&amp; i)
        {
            return compare(i) == true;
        }
        const bool compare(const iterator&amp; i)
        {
            if ( this==&amp;i )
                return true;
            else
                return false;
        }
        iterator* _next;
        T* _data;
        iterator&amp; operator=(const List&lt;T&gt;::iterator&amp; i)
        {
            _next = i._next;
            _data = i._data;
            return *this;
        }
        iterator&amp; operator++()
        {
            iterator* t = this;
            if ( t-&gt;_next )
                t = t-&gt;_next;
            return *t;
        }
    };
    iterator&amp; next(const iterator&amp; i)
    {
        return *i._next;
    }
    iterator&amp; begin()
    {
        return *_first;
    }
    iterator&amp; end()
    {
        return *_last;
    }
private:
    iterator* _first;
    iterator* _last;
}
</code></pre>
<p>Ich würde mich freuen, wenn mir jemanden helfen kann.<br />
Ich vermute, es ist ein design - Fehler.</p>
<p>Viele Grüße</p>
<p>uli3</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224098/verkettete-liste-in-c-mit-iteratoren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 18:26:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224098.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 05 Oct 2008 16:32:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Sun, 05 Oct 2008 16:32:06 GMT]]></title><description><![CDATA[<p>Hallo Gemeinde,</p>
<p>mich interessiert weniger, wie das mit der Verkettung funktioniert, sondern wie man &quot;modern&quot; soetwas macht. Ich möchte also sowas machen:</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;list.h&quot;

int main()
{
    List&lt;int&gt; l;
    l.append(0);
    l.append(1);
    List&lt;int&gt;::iterator it    = l.begin();
    List&lt;int&gt;::iterator endit = l.end();
    while ( it != endit )
    {
         std::cout &lt;&lt; *it &lt;&lt; &quot;\n&quot;;
         it = l.next(it);
    }
    return 0;
}
/*
    for ( List&lt;int&gt;::iterator it = l.begin(), endit=l.end();
          it != endit;
          ++it )
         std::cout &lt;&lt; *it &lt;&lt; &quot;\n&quot;;
*/
</code></pre>
<p>Wie man an der Auskommentierung sieht, habe ich es mit der Incremtierung nicht hin gekriegt. Auserdem gibt es noch ein Bug am Ende der Liste, den finde ich aber noch.</p>
<p>Die entsprechende h - Datei sieht folgendermaßen aus:</p>
<pre><code>template &lt;typename T&gt; class List
{
public:
    List()
    {
        _first = _last = 0;
    }
    void append(const T&amp; t)
    {
         T* v = new T(t);
        iterator* i = new iterator;
        i-&gt;_data = v;
        i-&gt;_next = 0;
        if ( _first == 0 )
            _first = i;
        else
            _last-&gt;_next = i;
        _last = i;
    }

    struct iterator
    {
        friend class List&lt;T&gt;;
        iterator()
        {
            _next =  0;
            _data =  0;
        }
        iterator(const iterator&amp; i)
        {        ~iterator()
        {
            delete _data;
            _data = 0;
        }
        T* operator-&gt;() const
        {
            return _data;
        }
        T&amp; operator*() const
        {
            return *_data;
        }
       const bool operator!=(const iterator&amp; i)
        {
            return compare(i) == false;
        }
        const bool operator==(const iterator&amp; i)
        {
            return compare(i) == true;
        }
        const bool compare(const iterator&amp; i)
        {
            if ( this==&amp;i )
                return true;
            else
                return false;
        }
        iterator* _next;
        T* _data;
        iterator&amp; operator=(const List&lt;T&gt;::iterator&amp; i)
        {
            _next = i._next;
            _data = i._data;
            return *this;
        }
        iterator&amp; operator++()
        {
            iterator* t = this;
            if ( t-&gt;_next )
                t = t-&gt;_next;
            return *t;
        }
    };
    iterator&amp; next(const iterator&amp; i)
    {
        return *i._next;
    }
    iterator&amp; begin()
    {
        return *_first;
    }
    iterator&amp; end()
    {
        return *_last;
    }
private:
    iterator* _first;
    iterator* _last;
}
</code></pre>
<p>Ich würde mich freuen, wenn mir jemanden helfen kann.<br />
Ich vermute, es ist ein design - Fehler.</p>
<p>Viele Grüße</p>
<p>uli3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1593763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1593763</guid><dc:creator><![CDATA[uli3]]></dc:creator><pubDate>Sun, 05 Oct 2008 16:32:06 GMT</pubDate></item><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Sun, 05 Oct 2008 17:12:53 GMT]]></title><description><![CDATA[<p>Hallo uli3,</p>
<p>abgesehen davon, dass in Zeile 30 vor dem Destruktor ein '}' fehlt, brauchst Du in einer einfach verketteten Liste ein Knoten-Element welches den Datentyp und den Zeiger auf das nächste Element enthält. Du hast den Iterator dazu missbraucht. Das ist vielleicht nicht grob falsch, aber ziemlich unüblich.</p>
<p>Besser ist man definiert sich ein Knotenelement innerhalb der Liste - also:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class List
{
    struct Node
    {
        Node* next_;
        T data_;
    };
public:
    // usw.
private:
    Node* head_;  // zeigt auf das erste Element oder auf 0
    // optional (um ein append bzw. push_back zu ermöglichen):
    Node* back_;  // zeigt in einer nicht leeren Liste auf das letze Element
};
</code></pre>
<p>Dann benötigst Du im Iterator nur einen Zeiger auf den aktuellen Knoten. Ich nenne ihn mal cur_ (current bzw. aktuell)</p>
<pre><code class="language-cpp">struct iterator
{
    // ..
private:
    Node* cur_;
};
</code></pre>
<p>(Bem.: der Underscore sollte nicht am Anfang stehen; darartige Namen sind für das System reserviert)</p>
<p>Mit begin zeigt cur_ auf das erste Element der Liste und mit end zeigt er auf 0.<br />
Dann sieht operator++ so aus:</p>
<pre><code class="language-cpp">iterator&amp; operator++()
        {
            cur_ = cur_-&gt;next_;
            return *this;
        }
</code></pre>
<p>Die Abfrage auf 0 ist unnötigt, da es nicht erlaubt ist den Ende-Iterator zu inkrementieren. Du kannst aber ein</p>
<pre><code class="language-cpp">assert( cur_ );
</code></pre>
<p>spendieren, falls es aus Versehen doch passiert.</p>
<p>Auf den Rest solltest Du selber kommen; sonst frage noch mal nach.<br />
Noch ein Tipp: benutze in jedem Konstruktor die Initialisierungsliste und versehe Node mit einem Konstruktor</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1593787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1593787</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 05 Oct 2008 17:12:53 GMT</pubDate></item><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Wed, 08 Oct 2008 19:54:45 GMT]]></title><description><![CDATA[<p>Hallo Werner,</p>
<p>danke für die rasche Antwort. Ich habe meine Implementation geändert.</p>
<p>Leider lässt sich unten stehender code nicht linken.</p>
<p>Kann mir jemand helfen?</p>
<p>Grüsse</p>
<p>uli3</p>
<pre><code>g++ -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.1-9' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-cld --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.3.1 (Debian 4.3.1-9)
</code></pre>
<pre><code>make
g++ -o testlist main.o node.o list.o
main.o: In function `main':
/home/uk/Daten/src/list2/main.cxx:6: undefined reference to `List&lt;int&gt;::List()'
/home/uk/Daten/src/list2/main.cxx:7: undefined reference to `List&lt;int&gt;::append(int const&amp;)'
/home/uk/Daten/src/list2/main.cxx:8: undefined reference to `List&lt;int&gt;::append(int const&amp;)'
/home/uk/Daten/src/list2/main.cxx:10: undefined reference to `List&lt;int&gt;::iterator::operator*() const'
/home/uk/Daten/src/list2/main.cxx:9: undefined reference to `List&lt;int&gt;::iterator::operator!=(List&lt;int&gt;::iterator const&amp;)'
/home/uk/Daten/src/list2/main.cxx:11: undefined reference to `List&lt;int&gt;::~List()'
/home/uk/Daten/src/list2/main.cxx:11: undefined reference to `List&lt;int&gt;::~List()'
main.o: In function `List&lt;int&gt;::begin()':
/home/uk/Daten/src/list2/list.h:33: undefined reference to `List&lt;int&gt;::iterator::iterator(Node&lt;int&gt; const*)'
main.o: In function `List&lt;int&gt;::end()':
/home/uk/Daten/src/list2/list.h:37: undefined reference to `List&lt;int&gt;::iterator::iterator(Node&lt;int&gt; const*)'
main.o: In function `List&lt;int&gt;::iterator::operator++()':
/home/uk/Daten/src/list2/list.h:23: undefined reference to `Node&lt;int&gt;::setNext(Node&lt;int&gt; const*)'
collect2: ld returned 1 exit status
make: *** [testlist] Fehler 1
</code></pre>
<p>Hier ist der kpmplette code</p>
<p>makefile</p>
<pre><code>CPP      = g++
COPTIONS = -pedantic -Wall -ggdb3
OBJS     = main.o node.o list.o

all : testlist

main.o : main.cxx makefile
        $(CPP) $(COPTIONS) -c $&lt;

node.o : node.cxx node.h makefile
        $(CPP) $(COPTIONS) -c $&lt;

list.o : list.cxx list.h makefile
        $(CPP) $(COPTIONS) -c $&lt;

testlist : $(OBJS) makefile
        $(CPP) -o testlist $(OBJS)

clean :
        @rm -f $(OBJS) testlist

doxy :
        doxygen doxyfile
</code></pre>
<p>node.h</p>
<pre><code class="language-cpp">#ifndef NODE_H
#define NODE_H
template &lt;typename T&gt; class Node
{
        public:
                Node();
                Node(const T*, const Node&lt;T&gt;*);
        Node&lt;T&gt;* next() const
                {
                        return _next;
                }
                void setNext(const Node&lt;T&gt;* next);
                T*       data() const;
                void setData(const T*);
        private:
                Node&lt;T&gt;* _next;
                T*       _data;
};
#endif
</code></pre>
<p>node.cxx</p>
<pre><code class="language-cpp">#include &quot;node.h&quot;

template &lt;typename T&gt; Node&lt;T&gt;::Node()
{
        _data = 0;
        _next = 0;
}

template &lt;typename T&gt; Node&lt;T&gt;::Node(const T* data, const Node&lt;T&gt;* next)
{
        _data = data;
        _next = next;
}

//template &lt;typename T&gt; Node&lt;T&gt;* Mode&lt;T&gt;::next() const
//{
//      return _next;
//}
//
template &lt;typename T&gt; void Node&lt;T&gt;::setNext(const Node* next)
{
        _next = next;
}

template &lt;typename T&gt; T* Node&lt;T&gt;::data() const
{
        return _data;
}

template &lt;typename T&gt; void Node&lt;T&gt;::setData(const T* data)
{
        return _data = data;
}
</code></pre>
<p>list.h</p>
<pre><code class="language-cpp">#ifndef LIST_H
#define LIST_H
#include &quot;node.h&quot;

template &lt;typename T&gt; class List
{
        public:
                List();
                ~List();
                void append(const T&amp;);
                void append(const T*);
                void clear();
                class iterator
                {
                        public:
                                iterator();
                                iterator(const Node&lt;T&gt;*);
                                iterator(const Node&lt;T&gt;&amp;);
                                T&amp; operator*() const;
                                T* operator-&gt;() const;
                                iterator&amp; operator++()
                                {
                                        _current-&gt;setNext(_current);
                                        return *this;
                                }
                                const bool operator!=(const iterator&amp;);
                                const bool operator==(const iterator&amp;);
                        private:
                                Node&lt;T&gt;* _current;
                };
                iterator begin()
                {
                        return iterator(_first);
                }
                iterator end()
                {
                        return iterator(_last);
                }
        private:
                Node&lt;T&gt;* _first;
                Node&lt;T&gt;* _last;
};

#endif
</code></pre>
<p>list.cxx</p>
<pre><code class="language-cpp">#include &quot;list.h&quot;                            

template &lt;typename T&gt; List&lt;T&gt;::List()
{                                    
        _first = 0;                  
        _last  = 0;                  
}                                    

template &lt;typename T&gt; List&lt;T&gt;::~List()
{                                     
        clear();                      
}                                     

template &lt;typename T&gt; void List&lt;T&gt;::clear()
{                                          
}                                          

template &lt;typename T&gt; void List&lt;T&gt;::append(const T* t)
{                                                     
        T* v = new T(t);                              
        Node&lt;T&gt;* node = new Node&lt;T&gt;(v, 0);            
        if ( _first == 0 )                            
                _first = node;                        
        else                                          
                _last.setNext(node);                  
        _last = node;                                 

}

//template &lt;typename T&gt; iterator List&lt;T&gt;::begin()
//{
//      return iterator(_first);
//}
//
//template &lt;typename T&gt; iterator List&lt;T&gt;::end()
//{
//      return iterator(_last);
//}
//
template &lt;typename T&gt; List&lt;T&gt;::iterator::iterator()
{
        _current = 0;
}

template &lt;typename T&gt; List&lt;T&gt;::iterator::iterator(const Node&lt;T&gt;* node)
{
        _current = node;
}

template &lt;typename T&gt; List&lt;T&gt;::iterator::iterator(const Node&lt;T&gt;&amp; node)
{
        _current = *node;
}

template &lt;typename T&gt; const bool List&lt;T&gt;::iterator::operator!=(const iterator&amp; it)
{
        return _current != &amp;it;
}

template &lt;typename T&gt; const bool List&lt;T&gt;::iterator::operator==(const iterator&amp; it)
{
        return _current == &amp;it;
}

template &lt;typename T&gt; T&amp; List&lt;T&gt;::iterator::operator*() const
{
        return _current.data();
}

//template &lt;typename T&gt; iterator&amp; List&lt;T&gt;::iterator::operator++()
//{
//      _current-&gt;setNext(_current);
//      return *this;
//}
</code></pre>
<p>main.cxx</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;list.h&quot;

int main()
{
        List&lt;int&gt; l;
        l.append(0);
        l.append(1);
         for ( List&lt;int&gt;::iterator it = l.begin(), endit=l.end(); it != endit; ++it )
                std::cout &lt;&lt; *it &lt;&lt; &quot;\n&quot;;
        return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1595858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595858</guid><dc:creator><![CDATA[uli3]]></dc:creator><pubDate>Wed, 08 Oct 2008 19:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Wed, 08 Oct 2008 20:38:49 GMT]]></title><description><![CDATA[<p>Hallo uli3,</p>
<p>Bei templates ist die Trennung von Implementierung und Deklaration nicht zulässig. Der Code von list.cxx und node.cxx gehört mit in list.h bzw. node.h hinein oder Du inkludierst am Ende der H-Datei das passende .cxx-File. Im make kannst Du list.cxx und node.cxx entfernen - da ist es überflüssig.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595880</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 08 Oct 2008 20:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Wed, 08 Oct 2008 21:17:41 GMT]]></title><description><![CDATA[<p>Hallo Werner,</p>
<p>ich habe jetzt die komplette Implementierung in die header genommen.<br />
Es kommen trotzdem Fehler.</p>
<p>Ich habe schonmal gesehen, dass template Klassen instanziert werden müssen.</p>
<p>Ich weis nicht wie das geht.</p>
<p>Viele Grüsse und vielen Dank</p>
<p>uli3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595904</guid><dc:creator><![CDATA[uli3]]></dc:creator><pubDate>Wed, 08 Oct 2008 21:17:41 GMT</pubDate></item><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Wed, 08 Oct 2008 21:36:45 GMT]]></title><description><![CDATA[<p>Das sind ganz normale Compilerfehler. Bisher kamen die deshalb nicht, weil list.cxx und node.cxx nicht instanziiert wurden. Die Instanziierung geschieht durch das 'List&lt;int&gt; l;' das reicht.</p>
<p>Unter anderen muss der Konstruktor von itertor einen nicht(!) const Pointer auf Node aufnehmen, sonst kann man später das Element ja nicht manipulieren.</p>
<pre><code class="language-cpp">iterator(/*const*/ Node&lt;T&gt;*);
</code></pre>
<p>Der Konstruktor mit der Referenz auf Node ist dann überflüssig.</p>
<p>Beim Vergleich zweier Iteratoren müssen natürlich die Member und nicht der Member mit dem Zeiger auf den Iterator verglichen werden</p>
<pre><code class="language-cpp">template &lt;typename T&gt; const bool List&lt;T&gt;::iterator::operator!=(const iterator&amp; it)
{
    return _current != it._current;
}
</code></pre>
<p>Und Node sollte einen Element als Member aufnehmen nicht als Pointer - das macht doch nur Arbeit und ist fehlerträchtig.</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class Node
{
// ...
        private:
                Node&lt;T&gt;* _next;
                T        _data; // _data ist Member von Node
};
</code></pre>
<p>.. und weitere Compilerfehler - such' mal selber <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>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595910</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 08 Oct 2008 21:36:45 GMT</pubDate></item><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Wed, 08 Oct 2008 23:33:07 GMT]]></title><description><![CDATA[<p>Hallo Werner,</p>
<p>danke für Deine Antwort.</p>
<p>Hier ein Prototyp:</p>
<p>list.h</p>
<pre><code class="language-cpp">#ifndef LIST_H                                                                                                                      
#define LIST_H                                                                                                                      
#include &quot;node.h&quot;                                                                                                                   

template &lt;typename T&gt; class List
{                               
        public:                 
                List()          
                {               
                        _first = 0;
                        _last  = 0;
                }                  
                ~List()            
                {                  
                        clear();   
                }                  

                void append(const T&amp; t)
                {                      
                        append(&amp;t);    
                }                      

                void append(const T* t)
                {                      
                        T* v = new T(*t);
                        Node&lt;T&gt;* node = new Node&lt;T&gt;(v, 0);
                        if ( _first == 0 )                
                                _first = node;            
                        else                              
                                _last-&gt;setNext(node);     
                        _last = node;                     

                }
                void clear()
                {           
                }           
                class iterator
                {             
                        public:
                                iterator()
                                {
                                        _current = 0;
                                }
                                iterator(Node&lt;T&gt;* node)
                                {
                                        _current = node;
                                }
                                const T&amp; operator*() const
                                {
                                        return *(_current-&gt;data());
                                }
                                const T* operator-&gt;() const
                                {
                                        return _current-&gt;data();
                                }
                                iterator&amp; operator++()
                                {
                                        _current = _current-&gt;next();
                                        return *this;
                                }
                                const bool operator!=(const iterator&amp; it) const
                                {
                                        return _current != it._current;
                                }
                                const bool operator==(const iterator&amp; it) const
                                {
                                        return _current == it._current;
                                }
                        private:
                                Node&lt;T&gt;* _current;
                };
                iterator begin()
                {
                        return iterator(_first);
                }
                iterator end()
                {
                        return iterator(_last-&gt;next());
                }
        private:
                Node&lt;T&gt;* _first;
                Node&lt;T&gt;* _last;
};

#endif
</code></pre>
<p>node.h</p>
<pre><code class="language-cpp">#ifndef NODE_H
#define NODE_H
template &lt;typename T&gt; class Node
{
        public:
                Node()
                {
                        _data = 0;
                        _next = 0;
                }
                Node(const Node* node)
                {
                        _data = node-&gt;_data;
                        _next = node-&gt;_next;
                }
                Node(const Node&amp; node)
                {
                        _data = node._data;
                        _next = node._next;
                }
                Node(T* data, Node&lt;T&gt;* next)
                {
                        _data = data;
                        _next = next;
                }
        Node&lt;T&gt;* next() const
                {
                        return _next;
                }
                void setNext(Node&lt;T&gt;* next)
                {
                        _next = next;
                }
                const T* data() const
                {
                        return _data;
                }
                void setData(const T* data)
                {
                        _data  = data;
                }
        private:
                Node&lt;T&gt;* _next;
                T* _data;
};
#endif
</code></pre>
<p>list.cxx</p>
<pre><code class="language-cpp">#include &quot;list.h&quot;
</code></pre>
<p>node.cxx</p>
<pre><code class="language-cpp">#include &quot;node.h&quot;
</code></pre>
<p>main.cxx</p>
<pre><code class="language-cpp">int main()
{
        List&lt;int&gt; l;
        l.append(0);
        l.append(1);
        l.append(2);
        l.append(3);
        l.append(4);
        l.append(5);
        l.append(6);
        l.append(7);
        l.append(8);
        l.append(9);
         for ( List&lt;int&gt;::iterator it = l.begin(), endit=l.end(); it != endit; ++it )
                std::cout &lt;&lt; *it &lt;&lt; std::endl;
        return 0;
}
</code></pre>
<p>Jetzt geht es ans optimieren und implementieren der restlichen Funktionen.</p>
<p>Viele Grüße</p>
<p>und Danke</p>
<p>uli3</p>
<p>[cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595943</guid><dc:creator><![CDATA[uli3]]></dc:creator><pubDate>Wed, 08 Oct 2008 23:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to verkettete Liste in C++ mit Iteratoren on Thu, 09 Oct 2008 07:57:16 GMT]]></title><description><![CDATA[<p>Ich würde dir noch empfehlen dir ein paar Gedanken zu machen über:<br />
- Kopierkonstruktor<br />
- Zuweisung<br />
- Initialisierungsliste (bereits genannt)<br />
- Freigeben von Speicher<br />
...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596035</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 09 Oct 2008 07:57:16 GMT</pubDate></item></channel></rss>