alternative zu std::vector?
-
Ich bräuchte bei einem Projekt etwas wie std::vector für eine Klasse, die const Objekte enthält. Gibt es so etwas? Mit std::vector geht das wirklich nicht, oder?
-
Hä?
Nach deiner Beschreibung sowas:class type { private: const other object; }; std::vector<type> vec(10);Null Problem.
-
Das Problem ist wohl, dass sowas wie
push_backnicht funktioniert, weil das einen Zuweisungsoperator braucht.Da bleibt eigentlich nichts anderes übrig als Zeiger zu speichern.
shared_ptroderinstrusive_ptrwären aber sinnvoller (gibts auf boost.org).std::vector<type *> vec;
-
TyRoXx schrieb:
Da bleibt eigentlich nichts anderes übrig als Zeiger zu speichern.
shared_ptroderinstrusive_ptrwären aber sinnvoller (gibts auf boost.org).Dann aber Pointer Container: http://highscore.de/cpp/boost/smartpointers.html#smartpointers_pointer_container
-
ok vielen Dank für die Antworten, ich werde mir wohl endlich mal die boost library anschauen müssen^^
-
TyRoXx schrieb:
Das Problem ist wohl, dass sowas wie
push_backnicht funktioniert, weil das einen Zuweisungsoperator braucht.wuss? wie bitte?
und wie das ohne assignment operator geht
(copy-ctor ist nötig, aber der ist ja unproblematisch bei "const" - wäre nur bei noncopyable ein ding)
-
hustbaer schrieb:
und wie das ohne assignment operator geht

(copy-ctor ist nötig, aber der ist ja unproblematisch bei "const" - wäre nur bei noncopyable ein ding)Ich habe es ausprobiert und Visual C++ verlangt den Operator.
-
Ja. Ich denke ich hatte auch mal so was ähnliches. Müsste es mal testen, ob es wirklich das war..
-
TyRoXx schrieb:
hustbaer schrieb:
und wie das ohne assignment operator geht

(copy-ctor ist nötig, aber der ist ja unproblematisch bei "const" - wäre nur bei noncopyable ein ding)Ich habe es ausprobiert und Visual C++ verlangt den Operator.
Ich habe es auch ausprobiert bevor ich meine Antwort gepostet habe, und Visual C++ (2008) braucht den Operator definitiv nicht (für push_back())

Du hast aber glaube ich trotzdem Recht, denn für erase() und Dergleichen wird IIRC der Assignment Operator gebraucht. An das hatte ich nicht gedacht.
EDIT: ARGH! ALLES UNFUG! SORRY! /EDIT
-
hustbaer schrieb:
Ich habe es auch ausprobiert bevor ich meine Antwort gepostet habe, und Visual C++ (2008) braucht den Operator definitiv nicht (für push_back())

Wie hast du das gemacht?
-
.....
-
HurgaHurga schrieb:
hustbaer schrieb:
Ich habe es auch ausprobiert bevor ich meine Antwort gepostet habe, und Visual C++ (2008) braucht den Operator definitiv nicht (für push_back())

Wie hast du das gemacht?
Alter Schwede das ist mir jetzt peinlich!
Wie?
Ganz einfach: indem ich vergessen habe das const beim Member dazuzuschreiben

Wobei ich nicht ganz checke, wieso std::vector::push_back vom MSVC so implementiert ist, wie es nunmal implementiert ist. Nämlich über insert(). Klar dass insert() den Assignment-Operator braucht. Nur dass push_back ihn nicht brauchen würde.