Elemente von std::vector



  • Ich versuche gerade, ein Programm zu debuggen, was u.a. std::vectors verwendet. Wenn ich nun in meinem Debugger in den vector sehe, sehe ich die member:

    _Vector_base<AItask,std::allocator<AItask> >
    _M_impl {...}
    allocator<AItask> {...}
    _M_start 0x003d25b8
    _M_finish 0x003d2608
    _M_end_of_storage 0x003d2608

    1. was macht _M_end_of_storage?
    ich denke mal, die beiden anderen zeigen auf das erste und das letzte element, was führt zu:

    2. Wie kann ich die anderen Elemente, die der Vector beinhaltet, einsehen?



  • Hallo,
    Was verwendest Du für ein Debugger?
    Du könntest die Elemente raus-tracen.

    simon



  • MinGW gdb 6.6 (als IDE eclipse/CDT)

    wie mach ich das? Mir eig egal, hauptsach, ich komm an die elemente 😉
    Der Vector muss sie doch auch irgendwie speichern o.O



  • Hallo,
    Hier ein Bsp. für einen std::vector mit int.

    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    for(std::vector<int>::const_iterator it = v.begin(); it != v.end(); ++it)
    {
       int val = *it;
       std::cout << val << std::endl;
    }
    

    gruss
    simon



  • lol, nein, so meint ich das net^^
    Ich meine nicht wie ich darauf zugreife, sondern wie er es ablegt. wenn ich darein gucke hat er wie gesagt nur die member für die adressen von start und finish und end of storage. Wo weiß er, wo der rest liegt? die objekte liegen doch nicht hintereinander im speicher?



  • die objekte liegen doch nicht hintereinander im speicher

    Doch, genau bei einem std::vector<T> tun sie das. Steht im Standard.

    Grüsse
    Simon



  • die frage war wohl eher: wo sind sie intern...

    (nachfolgendes ist unzuverlässig) nach einem kurzen blick in die gnu-stl: der zeiger _M_start bzw. _M_impl._M_start sollten auf das array zeigen. allerdings sollte dein debugger soetwas eigentlich alleine auflösen.



  • piXelshooter schrieb:

    1. was macht _M_end_of_storage?
    ich denke mal, die beiden anderen zeigen auf das erste und das letzte element, was führt zu:

    _M_end_of_storage zeigt auf das letzte reservierte Speicherelement nehme ich an.

    2. Wie kann ich die anderen Elemente, die der Vector beinhaltet, einsehen?

    Über _M_start bis _M_finish



  • Wie und ob der Debugger dir die Elemente eines Vector anzeigt, hat nichts mit der C++-Sprachnorm zu tun. Es ist eine Tool-Eigenschaft. Wenn dir der GDB oder CDT das nicht anzeigt, hast du leider Pech gehabt. Der MSVC6-Debugger konnte das z.B. auch nicht. Ich arbeite hier mit MSVC2005 und er zeigt mir die Elemente an. Ist also vom Tool abhängig.



  • ach so, ich bin eben genau davon ausgegangen, dass die objekte nicht hintereinanderlägen und daher pointer darauf unterhalten werden müssten.
    mittlerweile hab ich auch gefunden, wie ich ein stück speicher als array interpretieren kann (z.B. für mit new erzeugte arrays):
    print *array@length

    Gruß,
    Fabian.


Anmelden zum Antworten