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 callda 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
-
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