Sie können Zeiger auf Algorithmen wie std::sort
, std::find
oder std::copy
passieren. Dies sind Vorlagen, die für alles konfigurierbar sind, das als geeigneter Iterator fungiert.
Dies bedeutet nicht, dass verschiedene Iteratoren notwendigerweise zueinander konvertieren.
Die Methode erase
des std::vector<int>
Containers kann nur mit Iteratoren zu Elementen desselben Vektors arbeiten. Wie bereits erwähnt wurde dies kann als Zeiger implementiert werden, aber es ist in der Regel nicht aus Gründen hier angegeben: C++ std::vector<>::iterator is not a pointer, why?
std::find
Bedenken Sie:
template< class InputIt, class T >
InputIt find(InputIt first, InputIt last, const T& value);
Hier InputIt
ein Template-Parameter ist. Die Vorlage std::find
arbeitet mit jedem Iteratortyp, der die Anforderungen einer input iterator erfüllt und dessen operator*
etwas zurückgibt, das mit dem Typ T
verglichen werden kann. Zeiger funktionieren hier gut. Wie Fire Lancer in einem Kommentar richtig darauf hingewiesen hat, müssen sowohl first
als auch last
vom Typ InputIt
sein.
Jetzt vergleichen Sie diese mit std::vector::erase:
iterator erase(const_iterator pos);
Dies dauert eine const_iterator
, die eine der typedefs der std::vector
Klasse. Dies ist eine bestimmte Art von Iterator, kein Template-Parameter.
Warum denken Sie, dass ein Zeiger auf das Element derselbe wie ein Iterator ist ('std :: vector :: iterator')? –
NathanOliver
Welchen Fehler bekommen Sie? –
Während Iteratoren mithilfe von Zeigern implementiert werden konnten, ist ein Zeiger nicht automatisch ein Iterator. –