C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Iteratoren selbst implementieren

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andreas Seik
Guest





PostPosted: Thu May 11, 2006 12:40 pm    Post subject: Iteratoren selbst implementieren Reply with quote



Hallo NG,
für eine recht komplexe eigene Datenstruktur komme ich nicht mehr um STL
kompatible Iteratoren herum. Wo steht, wie man diese Implementiert? Wenn es
keine Web-Quelle gibt. Kann ich auch in der Uni-Bibliothek schauen.

Danke für jeden Hinweis
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Stefan Reuther
Guest





PostPosted: Fri May 12, 2006 6:21 pm    Post subject: Re: Iteratoren selbst implementieren Reply with quote



Andreas Seik wrote:
Quote:
für eine recht komplexe eigene Datenstruktur komme ich nicht mehr um STL
kompatible Iteratoren herum. Wo steht, wie man diese Implementiert? Wenn es
keine Web-Quelle gibt. Kann ich auch in der Uni-Bibliothek schauen.

Du weißt doch, was ein Iterator können muss. Und das implementierst du
halt. Du wirst halt mindestens die Operatoren "*" (Dereferenzieren),
"++" (weitersetzen, prefix/postfix) und "==" (Vergleich) brauchen. Dann
hast du einen Forward-Iterator. Der Bidirektionale kann dann noch "--",
und für den Random-Access kommt die ganze Ladung "+", "-", "<", "[]".

Die Doku der SGI STL <http://www.sgi.com/tech/stl/index.html> enthält
ein paar Beschreibungen, zum Beispiel diese
<http://www.sgi.com/tech/stl/ForwardIterator.html>.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Andreas Seik
Guest





PostPosted: Fri May 12, 2006 10:25 pm    Post subject: Re: Iteratoren selbst implementieren Reply with quote



Stefan Reuther wrote:
Quote:
Du weißt doch, was ein Iterator können muss.

Ganz so einfach finde ich das nicht.
In Java würde ich _immer_ zunächst nach Klassen suchen, von denen abzuleiten
ist. Und ich finde, das macht auch in C++ Sinn (Typensicherheit). Nur wird
man aber nicht immer fündig. Ich habe jedenfalls z.B. noch keine
forwad-iterator-Klasse gefunden die Parent aller forward-iteratoren ist.
OK - man kommt auch ohne aus. Aber diese "Es gibt kein" Aussagen sind immer
so schwer zu Beweisen :-)

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Stefan Reuther
Guest





PostPosted: Sat May 13, 2006 10:22 am    Post subject: Re: Iteratoren selbst implementieren Reply with quote

Andreas Seik wrote:
Quote:
Stefan Reuther wrote:
Du weißt doch, was ein Iterator können muss.

Ganz so einfach finde ich das nicht.
In Java würde ich _immer_ zunächst nach Klassen suchen, von denen abzuleiten
ist. Und ich finde, das macht auch in C++ Sinn (Typensicherheit). Nur wird
man aber nicht immer fündig. Ich habe jedenfalls z.B. noch keine
forwad-iterator-Klasse gefunden die Parent aller forward-iteratoren ist.

Die gibt es wirklich nicht. Zumindest nicht in der Form, wie du sie dir
vermutlich vorstellst. Die STL macht "Polymorphie zur Compilezeit". Da
braucht's keine Klasse, von der der Iterator abgeleitet ist. Wenn du
'std::find(mein_container.begin(), mein_container.end(), mein_wert)'
aufrufst, instanziiert der Compiler eine find-Funktion extra nur für
dich, die dann auch immer optimalen[tm] Code enthält. Er verwendet keine
Standard-find-Funktion, die per virtuellem Methodenaufruf auf die
Iteratoren zugreift.

Es gibt dennoch eine Klasse std::forward_iterator<T>, von der du
ableiten solltest. Das ist dazu da, dass fremder Code herausfinden kann,
dass es sich bei 'class AndreasTollerIterator' um einen Forward-Iterator
handelt. Das SGI Manual meint dazu:
# [1] It is not required that a Forward Iterator inherit from the base
# forward_iterator. It is, however, required that the functions
# iterator_category, distance_type, and value_type be defined for every
# Forward Iterator. (Or, if you are using the iterator_traits mechanism,
# that iterator_traits is properly specialized for every Forward
# Iterator.) Since those functions are defined for the base
# forward_iterator, the easiest way to ensure that are defined for a new
# type is to derive that class from forward_iterator and rely on the
# derived-to-base standard conversion of function arguments.

Aber, wie schon gesagt, diese Klasse enthält keinerlei sonstigen
Nährwert wie zu überschreibende abstrakte Methoden.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Christoph Kliemt
Guest





PostPosted: Sat May 13, 2006 11:17 am    Post subject: Re: Iteratoren selbst implementieren Reply with quote

Andreas Seik <andreas_neu (AT) gmxpro (DOT) de> writes:

Quote:
Hallo NG, fuer eine recht komplexe eigene Datenstruktur komme ich
nicht mehr um STL kompatible Iteratoren herum. Wo steht, wie man diese
Implementiert? Wenn es keine Web-Quelle gibt. Kann ich auch in der
Uni-Bibliothek schauen.

"The C++ Standard Library - A Tutorial and Reference" von
Nicolai M. Josuttis.

Ist auch sonst sehr zu empfehlen.

Gruss Christoph

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Hubert Schmid
Guest





PostPosted: Sun May 14, 2006 12:22 pm    Post subject: Re: Iteratoren selbst implementieren Reply with quote

Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:

Quote:
Es gibt dennoch eine Klasse std::forward_iterator<T>, von der du
ableiten solltest. Das ist dazu da, dass fremder Code herausfinden
kann, dass es sich bei 'class AndreasTollerIterator' um einen
Forward-Iterator handelt. Das SGI Manual meint dazu:
[..]


In der SGI-Dokumentation steht auch, dass diese Klasse nicht zum
C++-Standard gehört, und zumindest in C++-98 gibt es sie
nicht. Stattdessen gibt es dort das Template std::iterator (24.3.2).

Gruß, Hubert

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Stefan Reuther
Guest





PostPosted: Sun May 14, 2006 2:23 pm    Post subject: Re: Iteratoren selbst implementieren Reply with quote

Hubert Schmid wrote:
Quote:
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
Es gibt dennoch eine Klasse std::forward_iterator<T>, von der du
ableiten solltest. Das ist dazu da, dass fremder Code herausfinden
kann, dass es sich bei 'class AndreasTollerIterator' um einen
Forward-Iterator handelt. Das SGI Manual meint dazu:
[..]
In der SGI-Dokumentation steht auch, dass diese Klasse nicht zum
C++-Standard gehört, und zumindest in C++-98 gibt es sie
nicht. Stattdessen gibt es dort das Template std::iterator (24.3.2).

Stimmt, danke. Eigentlich wollte ich ja nachsehen, habe es aus Faulheit
dann aber doch unterlassen.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
kanze
Guest





PostPosted: Mon May 15, 2006 2:22 pm    Post subject: Re: Iteratoren selbst implementieren Reply with quote

Andreas Seik wrote:

Quote:
für eine recht komplexe eigene Datenstruktur komme ich nicht
mehr um STL kompatible Iteratoren herum. Wo steht, wie man
diese Implementiert? Wenn es keine Web-Quelle gibt. Kann ich
auch in der Uni-Bibliothek schauen.

In der meisten Dokus soll doch stehen, welche Operationen der
Iterator unterstuzen muss. Es ist aber relatif aufwendig. Dafür
gibt es boost::iterator, bei Boost, der den Aufwand vereinfacht.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.