Punkt und Pfeiloperator



  • Moin,

    ich habe da mal eine Anwedungsfrage.
    Und zwar mit "Punkt und Pfeiloperator".

    Wenn ich

    std::map<std::string, std::vector<int> >::iterator it;
    std::vector<int>::iterator it2;
    
    it=fooMap.begin();
    
    it2=it->first.begin(); //Stimmt so, oder?
    

    dann habe ich Pfeiloperator und dann Punkt.

    Aber Wenn ich

    struct blaFoo{
        std::vector<int> *Vectorst;
        blaFoo(){ Vectorst=new std::vector<int>; }
    };
    
    std::vector<int>::iterator it;
    blaFoo myBla;
    
    it=myBla.Vectorst->begin();
    

    Wieso ist hier dann Punkt und dann Pfeiloperator.
    Also gerade umgekehrt.

    Wann kommst Also Punkt oder Pfeiloperator?

    Und stimmt das so:

    std::vector<int> *blavec;
    
    it=blavec->begin();
    //oder
    it=(*blavec).begin();
    //was stimmt von den Beiden??
    

    Danke und schoene Feiertage,
    Ghost



  • Lies besser in einem Buch nach. "." ist ein Member des Objekts und "->" ein Member des Objekts, auf das gezeigt wird. Im Fall von Iteratoren ist das aber noch ein bissl was anderes.

    Bye, TGGC (Wähle deine Helden)



  • soweit ich weiß, nutzt man den punktoperator auf objekte, die sich im stack befinden, und den pfeiloperator auf objekte, die sich im heap befinden.



  • TGGC_work schrieb:

    Lies besser in einem Buch nach. "." ist ein Member des Objekts und "->" ein Member des Objekts, auf das gezeigt wird. Im Fall von Iteratoren ist das aber noch ein bissl was anderes.

    Iteratoren versuchen, sich wie Zeiger zu verhalten und überladen deshalb die Operatoren -> und *, damit sie mit der Zeigersyntax verwendbar sind.

    Green_Ghost schrieb:

    std::vector<int> *blavec;
    
    it=blavec->begin();
    //oder
    it=(*blavec).begin();
    //was stimmt von den Beiden??
    

    Beide sind korrekt; das erste ist nur eine Kurzschreibweise für das zweite (und das ist auch besser, denn bei sowas

    (*(*(*MainForm).MemoField).Lines).Add ("");
    // anstatt
    MainForm->MemoField->Lines->Add ("");
    

    wird es sonst schnell unübersichtlich).

    mika schrieb:

    soweit ich weiß, nutzt man den punktoperator auf objekte, die sich im stack befinden, und den pfeiloperator auf objekte, die sich im heap befinden.

    Nein. Den Punktoperator benutzt du, wenn du ein Objekt oder eine Referenz auf ein Objekt hast, den Pfeiloperator, wenn du einen Zeiger auf ein Objekt hast. Du kannst problemlos Zeiger auf Objekte auf dem Stack oder Referenzen auf Objekte auf dem Heap erstellen.

    Moritz



  • audacia schrieb:

    Iteratoren versuchen, sich wie Zeiger zu verhalten

    Sind aber eben keine. Der feine Unterschied.

    Bye, TGGC (Wähle deine Helden)



  • TGGC_work schrieb:

    audacia schrieb:

    Iteratoren versuchen, sich wie Zeiger zu verhalten

    Sind aber eben keine. Der feine Unterschied.

    Richtig. Hat das jemand bestritten?



  • Gut Danke.
    Jetzt habe ich es gekopft.

    TGGC_work schrieb:

    Lies besser in einem Buch nach.

    Hab ich. Nur mir fehlte irgend etwas noch.
    Aber mit diesen Posts hier, hab ich jetzt verstanden. 👍

    Danke an alle,
    Ghost



  • TGGC_work schrieb:

    audacia schrieb:

    Iteratoren versuchen, sich wie Zeiger zu verhalten

    Sind aber eben keine. Der feine Unterschied.

    Da irrst du. In C++ ist jeder Zeiger ein Iterator, aber nicht jeder Iterator ist ein Zeiger.



  • HumeSikkins schrieb:

    aber nicht jeder Iterator ist ein Zeiger.

    Ja. So ist es.

    Bye, TGGC (Keine Macht den Dummen)