Objekte Verwalten II
-
Ich bin noch am planen einen Objectmanagers. Habe auch schon ein paar durchdacht, aber noch nicht implementiert. Amateurhaft habe ich mir mal eine Skizze gemacht:
http://mitglied.lycos.de/gidxgraphic/dia.PNG
Der Benutzer soll die Liste natürlich nie zu Gesicht bekommen. Er darf nur über den Objectmanager Wert in der Liste ändern. Die Liste soll dynamisch sein. Also Einträge hinzugefügt werden und wieder gelöscht.
Wie würdet ihr das implementieren wenn es auch auf Geschwindigkeit ankommt?
Ich bitte um ein paar Ideen und Vorschläge. Danke.
cu
-
^
-
Na Leute, da wird es doch den einen oder anderen geben der mir sagen könnte als was man am besten die dynamische Liste erstellt und wie man einen Eintrag in der Liste identifizieren kann.
-
Dein Vorgaben sind etwas schwammig. Haben alle Objekte den gleichen Typ ? Kann man jedes Objekt durch einen eindeutigen Schlüssel identifizieren ?
In diesem Fall würde ich eine STL-Map verwenden.
mfg JJ
-
Hmmm, jetzt habe ich es mal so probiert (siehe unten). Und wollte über einen Zeiger auf die Werte in der Liste zu greifen. Doch ich musste feststellen das <vector> beim Einfügen eines neuen Eintrags alles umkopiert und der Zeiger auf den Eintrag nicht mehr gültig ist.
Jetzt ein noch mal ein paar Fragen.
-Wie funktioniert das mit einer map? Wie erzeuge ich am besten eine ID für den Eintrag.
-Was würdet ihr zum Einstatz der <list> ?
Ich glaube der Weg war richtig, doch die Umsätzung war fehlerhaft
#include <iostream> #include <string> #include <vector> struct ENTITY{ int x,y; int* pTest; }; class OBJECTMANAGER{ private: std::vector<ENTITY> m_vEntity; int m_iEntity; public: OBJECTMANAGER() { m_iEntity=-1; } ENTITY* AddObject(int* test) { m_iEntity++; m_vEntity.push_back(ENTITY()); m_vEntity[m_iEntity].pTest=test; return &m_vEntity[m_iEntity]; } }; OBJECTMANAGER obMan; ENTITY *pEnt; ENTITY *pEnt2; int main() { int a=105; int* zeiger=&a; pEnt=obMan.AddObject(zeiger); std::cout<<*pEnt->pTest<<std::endl; int a2=200; int* zeiger2=&a2; pEnt2=obMan.AddObject(zeiger2); std::cout<<*pEnt2->pTest<<std::endl; return 0; }
-
struct ENTITY{ int* pTest; int x,y; }; class OBJECTMANAGER{ private: std::list<ENTITY> m_lEntity; std::list<ENTITY>::iterator i; public: OBJECTMANAGER() {} ENTITY* AddObject(int* test) { int a=10;//Dummywert___!!!!! ENTITY temp; temp.pTest=&a; m_lEntity.insert(m_lEntity.end(),temp); return 0;//temp geht nicht weil temporär!!! } };
Also wenn ich es mit der STL list mache weiss ich nicht wie ich den Zeiger auf den Eintrag an den Zeiger für ENTITY übergeben kann?
Ich bräuchte halt ein wenig Unterstützung. Weil ich noch nicht sehr lange in C++ programmiere. Ich weiss aber was ich will. Nur weiss ich nicht wie ich das umsätze.
-
ich dachte, eine linked list zeigt immer auf das nächste element.
wenn ja, dann müsste es doch so aussehen:struct ENTITY{ ENTITY* pTest; int x,y; };
und wenn du das mit der std::list machst, kannst du ENTITY* pTest weglassen und per iterator zum nächsten object gehen