obi68 schrieb:
Liebe community,
ist eine verkettete Liste mit unterschiedlichen Container-Inhalten überhaupt möglich?
Inhalt: Byte
Zeiger: Byte
später bei Dez 255 (max Wert für Byte)
Inhalt: Byte
Zeiger: Integer
und dann bei 256
Inhalt: Integer
Zeiger: Integer
Nur so könnten sämtliche Zahlen ob sehr klein oder sehr gross mit kleinst möglichen reservierten Speicherplatz in eine verkettete Liste gebracht werden.
Oder hat jemand eine ganz andere Methode bzw. Idee?
Besten Dank
Nachträge:
Die Sprache ist mir egal.
Arrays sind nicht dynamisch.
Es müssen auch Werte grösser int64 abgespeichert werden können.
Hauptaugenmerk auf den rot markierten Teil. In diversen Sprachen mit dynamischer Typisierung (z.B. Python) kannst du in eine Liste schmeißen, was immer du möchtest. An den ersten Index einen Integer, an den zweiten eine Instanz irgend einer Klasse und an den dritten ein String? Kein Problem einfach rein damit.
ALLERDINGS, deine Anforderung für "kleinst möglichen reservierten Speicherplatz" geht bei Nutzung solcher Sprachen ohnehin flöten, denn im Vergleich zu C und C++ würde jedes Listenelement einen gewissen Overhead mit sich bringen (je nach Implementierung).
Wenn wir annehmen, daß sich deine Frage auf C++ bezieht, fallen mir nur 3 mögliche Ansätze ein, und keiner von denen ist besonders elegant oder auch nur im Ansatz effizient.
1) Du speicherst in einem std::vector nix als void-Pointer. Dann mußt du aber immer wissen, welchen Typs das über den jeweiligen Zeiger referenzierte Objekt ist. Dieses Wissen müßtest du natürlich selbst irgend wo hinterlegen, weshalb sich's auch hier mit der angeblichen Effizienz eigentlich schon gesch****en hat.
2) Du erstellst dir eine union und gibst der union als Member Variablen aller möglichen Typen, die du speichern möchtest. Dann legst du dir einen std::vector an, der Variablen des eben definierten union-Typs speichert. Das birgt aber das gleiche Problem wie 1).
3). Du benutzt die boost-Libraries und verwendest Boost.Any ... habe ich noch nie gemacht - kann daher nicht beurteilen, wie effizient das ist. Da die Boost-Leute aber auch keine Zauberer sind, nehme ich an, das diese Lösung eben so einen gewissen Overhead mit sich bringt, der deine Forderung nach maximaler Effizienz zunichte macht.
Ich würde noch mal gründlich hinterfragen, WARUM du solch eine Lösung überhaupt anstrebst. Aus meiner Erfahrung ist es eigentlich so gut wie nie notwendig, Objekte x verschiedener Typen in einem Container zu speichern.
EDIT: Zusätzlich könntest du natürlich noch eine komplexe Klassenhierarchie aufbauen und immer nur Zeiger des Basisklassentyps im vector speichern. Aber auch das bringt nicht die von dir geforderte Effizienz.