seltsames Phänomen mit std::vector



  • Hallo!
    Nachdem ich das eine Video von Bjarne Stroustroup angeschaut habe (std::vector ist in den meisten Fällen schneller, durch weniger cache misses), verwende ich etwas öfter den std::vector.
    Allerdings bin ich zu einem (meiner Meining nach) zu einem komischen bzw. skurrilem Phänomen gekommen, denn wenn ich statt dem vector eine Liste benutze kommt dieser Fehler nicht vor.

    Ich habe hier einen vector mit pointern auf display.
    mit einem const_iterator such eich nach einem bestimmten objekt und falls es gefunden wurde dann soll es gelöscht werden.

    //searches display respectively observer in observer vector
    	TItorConst found=find(mDisplays.begin(),mDisplays.end(),cdisplay);
    	if (found != mDisplays.end()){
    		//display found in vector
    		mDisplays.erase(cdisplay);
    	}
    

    allerdings bekomme ich den fehler:
    1 IntelliSense: no instance of overloaded function "std::vector<_Ty, _Ax>::erase [with _Ty=display *, _Ax=std::allocator<display *>]" matches the argument list
    und to few arguments in function call

    da ich mit den intellisense bzw. mit den linkerfehlern (ist es vllt in der deutschen Version besser?) nichts anfangen kann, frage ich wieder einaml euch was für diese problem die erklärung ist 🙂

    mfg
    ACnut


  • Mod

    Die Zeile ist ja völlig sinnlos. erase erwartet den Iterator.

    if (found != mDisplays.end())
            mDisplays.erase(found);
    

    Dass du einen const_iterator übergeben kannst, ist übrigens erst seit C++11 erlaubt.



  • ja hast recht, aber trotzdem lustig, denn mit der liste gehts xD

    anschenend hat das auch der VC10 übernommen, denn der meckert auch nicht 🙂

    nochmals vielen dank für die hilfe 🙂



  • dann hast du glück dass die stl deines compilers toleranter ist. zulässig ist es auf jeden fall auch bei der list nicht...



  • hast vermutlich recht. hätte den fehler eigentlich selber sehen müssen 😞 🙂


Anmelden zum Antworten