Iterator - Methoden
-
Hi,
Ich übergebe einer Funktion den Iterator eines Vektors. Wie kann ich nun in der aufgerufenen Funktion mithilfe des Iterators überprüfen, ob der Vektor leer ist oder nicht?
lg
-
Normlerweise macht man sowas ja in der Form
template<typename Iter> void Foo(Iter first, Iter last) { for(;first != last; ++first) { bar(*first); } } int main() { vector<int> v; Foo(v.begin(), v.end()); return 0; }Also wenn v leer ist, dann ist first == last bzw. v.begin() == v.last(). Mit Iteratoren arbeitet man fast immer oder meistens paarweise. Einer zeigt auf den Anfang, einer hinter das Ende.
-
Jeffson schrieb:
Hi,
Ich übergebe einer Funktion den Iterator eines Vektors. Wie kann ich nun in der aufgerufenen Funktion mithilfe des Iterators überprüfen, ob der Vektor leer ist oder nicht?
lg
Wieso übergibst du nicht einfach die Referenz auf den Vektor selbst?
-
asdasd schrieb:
Wieso übergibst du nicht einfach die Referenz auf den Vektor selbst?
Weil das Arbeiten mit Iteratoren wesentlich flexibler ist. Funktioniert mit anderen Containern und C Rohzeigern. Ausserdem kann man Foo einen Bereich mitgeben, anstatt alle Elemente des vectors zu behandeln.
-
Jeffson schrieb:
Ich übergebe einer Funktion den Iterator eines Vektors. Wie kann ich nun in der aufgerufenen Funktion mithilfe des Iterators überprüfen, ob der Vektor leer ist oder nicht?
Die Art von Iteratoren, die sich in C++ etabliert haben, sind dumm. Die wissen das in aller Regel nicht. Bei zwei Iteratoren für Anfang (einschließlich) und Ende (ausschließlich) kannst Du die Iteratoren vergleichen. Sollten sie gleich sein, ist die Sequenz leer.