Custom Iterator absichern



  • Ich habe ein Vector-Template und eigene Custom Iterator Klasse geschrieben; funktioniert alles so weit, aber ich stehe auf der Leitung wenn es darum geht, den Iterator gegen Überlaufen abzusichern – v.a. beim Rückwärtsiterieren läuft er übers Ziel hinaus. Ich weiß, dass ich mit der zweiten Pointer-Variablen etwas machen sollte – aber wie gebe ich der einen sinnvollen Wert, damit ich den dann prüfen kann?

    Ich sitz da gerade tief im Kaninchenloch und weiß nicht mehr, wie ich meinem zweiten Pointer p einen sinnvollen Wert gebe, gegen den ich dann prüfen kann ...

    Die Iterator-Klasse erbt von der Vector-Template-Klasse; hier sind auszugsweise die Konstruktoren von Vector:

    private:
       size_t sz;
       size_t max_sz;
       pointer values;
       static constexpr size_t min_sz{5};
    
    public:
       Vector(size_t n) : sz {0}, max_sz{n<min_sz?min_sz:n}, values{new value_type[max_sz]} {}
       Vector() : Vector(min_sz) {} 
    
    

    und Iterator:

    private:
            pointer ptr;
            pointer p;
        public:
            IteratorA() : ptr{nullptr} {};
            IteratorA(pointer ptr) : ptr{ptr} {};
    
    


  • @gse1 sagte in Custom Iterator absichern:

    Die Iterator-Klasse erbt von der Vector-Template-Klasse

    Nicht wirklich, oder?

    Es gibt doch viele Iterator-Implementierungen im Internet, s. z.B. Writing a custom iterator in modern C++, How to write an iterator in C++ und Basic iterator supporting vector implementation.



  • @Th69
    Ja. Die kenn ich. Und sie haben alle das gleiche Problem, das ich beschrieben habe.


  • Mod

    @gse1 sagte in Custom Iterator absichern:

    @Th69
    Ja. Die kenn ich. Und sie haben alle das gleiche Problem, das ich beschrieben habe.

    Was? Die laufen alle über das Ziel hinaus, wenn du rückwärts läufst? Vielleicht solltest du eher überdenken, wie du rückwärts läufst, wenn du mit jedem Iterator über das Ziel hinaus läufst.


Log in to reply