Ich habe meine eigene Containervorlage mit einem Iterator geschrieben. Wie implementiere ich const_iterator?C++: Wie schreibe ich einen Const_iterator?
template <class T>
class my_container {
private:
...
public:
my_container() : ... { }
~my_container() { }
class iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
public: ...
Was ist mit Methoden, die Iteratoren als Argumente oder Iteratoren zurückgeben? Ich muss sie für const_iterators überladen? Scheint wie ein Haufen wiederholten Code. –
Iteratoren sollten in const_iterators konvertierbar sein, so dass Sie nicht überladen müssen, wenn Sie nur einen const_iterator benötigen. Sie tun dies für Funktionen wie begin(), end(), aber es gibt keinen Weg dazu, da dies auch Teil der Signatur der Methode ist. –
@ Posco Grubb: Nein. Wenn Sie Methoden haben, die Iteratoren nehmen, dann template sie. Die Methode sollte für alles funktionieren, was wie ein Iterator funktioniert. Wenn die Methode einen Iterator und nicht einen Const_iterator erfordert, generiert der Compiler den entsprechenden Fehler. –