Schleifenabbruch
-
hi,
ich habe ne klasse Punkt und im program eine liste dieser punkte.
wenn ich durch die liste iteriere (vergleich von zwei punktlisten miteinander), reicht dann folgende abbruchbedingung oder ist es möglich das diese einmal nicht greift?
// Beispiel Iterator it1 = Liste1.Begin(); Iterator it2 = Liste2.Begin(); while (*it1 == *it2) { ++it1; ++it2; }
ist es hier besser noch ein extra-abbruchkriterium einzuführen, ala
while (it1 != Liste1.End() && *it1 == *it2) { ... }
??
-
Hmm ich weiss wirklich nicht wie deine Begin() Funktion aussieht. Ich denke mal das so nicht viel passiert, da erst die Funktion Begin() aufgerufen wird DANN die Fkt Begin() vom 2ten.
Was mach die FKT? Das array "durchgehen", wenn ja bringt das nicht, da womöglich ( ka da ich die fkt begin() nicht kenne ) der iterator auf dem letzen Feld stehen wird.
normalerweise macht man eine schleife
von die ( wenn beide gleich lang sind ) von i = 0 bis zum ende der liste geht und dann in der schleife mit if vergleicht.
Oder du schreibst eine Funktion die als Parameter 2 Iterator hat z.b. vergleich( Iterator &eins, Iterator &zwei )
und beachtest in dieser fkt. die länge der jeweiligen Iterator ect pp ..
So kannst du leicht
it4 mit it6 vergleichen oder it8 mit it2.
-
hm, okay vlei wars unglücklich beschrieben... hier mal bissel mehr code
Begin() liefert einen Zeiger auf das 0. Element der Liste
End() liefert einen Zeiger auf das n. Element der Liste
-> ausgehend davon, dass die liste von 0 - (n-1) geht// Iterator template <class T> class TRSIterator { private: T *pItem; public: TRSIterator(T *rhs) { pItem = rhs; } int operator == (const TRSIterator<T> &rhs) const { return (pItem == rhs.pItem); } const TRSIterator<T>& operator ++ () { pItem++; return *this; } T& operator * () const { return *pItem; } }; // Auszug aus der Listenklasse template <class T> class TRSDynamicList : public TRSIterator<T> { protected: T *Items; // Datenarray int Count; // Anzahl der Elemente im Array public: Iterator Begin() const { return Items; } Iterator End() const { return Items + Count; } }; template <class T> int TRSDynamicList<T>::operator == (const TRSDynamicList<T> &rhs) { // Listen müssen gleich lang sein if (rhs.Count != Count) return false; Iterator it1 = Begin(); Iterator it2 = rhs.Begin(); // Punktlisten vergleichen while (*it1 == *it2) { ++it1; ++it2; }; return (it1 == End()) && (it2 == rhs.End()); }
-
achso jetzt check ich das mit dem operator == erst.
also ich denke du brauchst die extra abbruchbed. nicht. aber eine mehr reinmachen ist nie falsch