Was wir über std::advance
wissen, ist die folgende:Wie wird std :: advance implementiert, um das Verhalten des Iteratortyps zu ändern?
template <class InputIterator, class Distance>
void advance (InputIterator& i, Distance n);
Zweck
Fortschritte der Iterator i
durch n
Elemente.
Wenn i
ist ein Random Access Iterator, verwendet die Funktion einmal operator+
oder operator-
, sonst wird die Funktion wiederholt die Erhöhung verwendet oder verringern Operator (operator++
oder operator--
) bis n
Elemente vorgeschoben wurden.
Meine Frage ist folgende: Wie wird std::advance
so implementiert, dass er erkennt, wenn it
ein Random Access Iterator ist oder nicht? Woher weiß es, dass es operator+
anstelle von operator++
verwenden kann?
Ist das eine Hausaufgabe? – chrisaycock
Nein. Spielt es überhaupt eine Rolle? Dies ist eine interessante Frage, die eine interessante Lösung haben sollte. Und das Interesse ändert sich nicht, egal ob es während des Interviews gefragt wurde oder ob es für eine Hausaufgabe gegeben wurde oder ich habe gerade darüber nachgedacht während ich meinen Kaffee trinke, oder? – Narek
@Narek Der Grund, warum es in diesem Fall wichtig ist, ist, dass wir keine Hausaufgaben machen. Wir helfen gerne, aber wir tun es nicht * für * sie. In der Tat werde ich die Antworten ablehnen, die das tun, da ich es für einen First-Class-A ** -Loch-Zug halte. Ihre Frage ist jedoch sehr interessant. –