verkettete Liste
-
hallo,
ich hab da ein kleines Problem mit verketteten Listen, wenn
ich die Liste ausgebe sind die Werte in umgekehrter Reihenfolge
so speichere ich die Liste:class C_m_Map { public: float m_data; std::string m_string; C_m_Map *m_pNextElement; }; pObjectElement=new C_m_Map; pObjectElement->m_data = mObject.x; pObjectElement->m_pNextElement = m_anchor; m_anchor = m_anchor->m_pNextElement;Wie speichert man die Daten in der richtigen Reihenfolge?
Oder vielleicht geb ich es Falsch aus:while( m_anchor->m_pNextElement != 0 ) { m_anchor = m_anchor->m_pNextElement; }
-
struct item { float data; std::string string; item* next; item(float data = 0.0f, std::string const& str = "") : data(data), string(str), next(NULL) {} }; class list { item* m_begin; item* m_curent; public: list() : m_begin(NULL), m_curent(m_begin) {} ~list() { item* tmp(m_begin); while (tmp != NULL) { item* next(tmp->next); delete tmp; tmp = next; } } void push_back(item const& data) { item* tmp(m_begin == NULL ? m_begin : m_curent->next); m_curent = tmp = new item(data.data, data.string); } };so könnte man das (grob) implementieren ... ist jetzt nicht überprüft, aber sollte gehen ...
-
und wie speichere ich in die Liste was rein, mit der push_back Funktion?Wozu
ist die gut, die ist voll brutal zu verstehen besonders mit dem ? ist das ein Bit verschiebungs Ding oder das war irgenwas mit 3*if Operator.
-
Das ? zusammen mit : verhält sich so ähnlich wie ein einfaches if:
tmp(m_begin == NULL ? m_begin : m_curent->next); //ist das gleiche wie if(m_begin == NULL) tmp(m_begin); else tmp(m_curent->next);