Gibt es einen Container, der einen lokalen Puffer für eine kleine Anzahl von Elementen verwendet und eine Heap-Zuweisung nur dann verwendet, wenn die Anzahl der Elemente eine bestimmte Grenze überschreitet? Ähnlich wie die meisten std::string
Implementierungen tun.Container mit Stack und dynamische Zuordnung
Hintergrund
Der Behälter wird in der folgenden (vereinfacht) Kontext verwendet:
Foo foo; // some data
vector<HandlerPtr> tagged; // receives "tagged" items
// first pass: over all items in someList
for each(HandlerPtr h in someList)
{
h->HandleFoo(foo); // foo may become tagged or untagged here
if (foo.Tagged())
tagged.push_back(h);
}
for(auto itr=tagged.rbegin(); itr!=tagged.end(); ++itr)
{
// ...
}
Dieser Codeteil hat eine hohe Aufruffrequenz, sondern ein Element Tagging ist eher selten, Zahl von Artikeln in someContainer
ist in der Regel niedrig, aber ungebunden. Ich kann einen vorab zugewiesenen "globaleren" Puffer nicht einfach verwenden. Ziel ist es, die häufige Zuordnung zu vermeiden.
Anruffrequenz
- Häufig: kein Element markiert wird. std :: vector is fine
- Häufig: Nur eines der wenigen Elemente wird markiert. verursacht hohe Frequenzzuweisung I
- Sehr selten, aber muß unterstützt werden, um vermeiden will: someList wächst während ersten Durchgangs Anzahl der Elemente nicht vorhersehbar, aber immer noch niedrig
Möchten Sie statische oder Stapelzuordnungen verwenden? Für Stack-Zuordnung siehe http://stackoverflow.com/questions/354442/looking-for-c-stl-like-vector-class-but-using-stack-storage – nimrodm
@nimrodn: Stack-Zuweisung ist wahrscheinlich eine bessere Beschreibung von was Ich möchte (fester Titel). eine begrenzte Anzahl von Elementen, die in der Containerinstanz gespeichert werden können (ohne zusätzliche Zuweisung) und die Verwendung der Heap-Zuweisung, wenn dies nicht ausreichend ist. – peterchen
'std :: vector' reserviert keinen Speicher bevor mindestens ein Element eingefügt wurde. –