Frage

In einem eingebetteten Programm habe ich ein Bildschirm-Objekt, das eine Liste von Elementen verwalten muss angezeigt werden soll. Die erste Liste der Einzelteile wird von einem einfachen DB auf dem Bildschirm laden und die Liste über „Hinzufügen“ und „Entfernen“ Ereignisse wird aktualisiert gezogen werden. Diese Liste muss sortiert werden nach bestimmten Kriterien. Ich suche eine Container-Klasse, die mir dies erreichen helfen kann. Darüber hinaus gibt es keinen dynamischen Speicher im System, damit ich einen Speicherpool von leeren Elementen haben muß, die ich in den Behälter zu laden und zu dem freien Pool zurück, wenn ich mit dem Artikel fertig bin.

Wer weiß von nichts falls in C ++ Standard Library oder Auftrieb? Oder vielleicht eine andere Lösung?

War es hilfreich?

Lösung

Wenn Sie einen Standard-Container (wie std::map oder std::set) müssen Sie über verschiedene dynamische Zuweisungen sorgen: die Zuordnung der internen Container-Datenstrukturen und die Zuordnung der eigenen Daten, die Sie in dem Behälter gespeichert werden sollen. Die Zuordnung der internen Datenstrukturen kann, indem Sie Ihre eigene std :: allocator angepasst werden (ich bin sicher, dass Sie in der Lage sein werden ein pass Ihre Bedürfnisse zu finden, es gibt viele von dieser zur Verfügung). Die Zuordnung der eigenen Datenstrukturen muss separat behandelt werden, die am häufigsten von typspezifischen new und delete Betreiber zu implementieren. Scott Meyers hat einen schönen Artikel über diese in einem seiner Bücher.

Eine andere Lösung wäre Boost.Intrusive, eine Reihe von Behältern zu verwenden, in dem alle internen Datenelemente für den Container benötigt in Ihrer eigenen Datenstrukturen gespeichert sind (das ist, warum sie aufdringlich genannt werden). Dies entlastet Sie von zwei verschiedenen Zuweisungsregelungen vorhanden, da man nur über die eigene Datenzuordnung müssen kümmern.

Andere Tipps

warum nicht STL verwenden, aber Ihr eigenes allocator und deallocator aus, zum Beispiel STL-Vektor wird als template<class T,class A = std::allocator<T>> vector {} definiert ist, können Sie erstellen und Ihr eigenes allocator gesetzt, den Speicherplatz von dem Speicherpool anfordern.

als für Speicherzuordner, nutzen vorhandene Sie Speicherzuordner wie Hoard http://www.hoard.org/ oder Ned Allocator http://www.nedprod.com/programs/portable/ nedmalloc / , die für Embedded-System sehr hohe Leistung und gut ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top