Существует ли контейнер, который использует локальный буфер для небольшого количества элементов и использует распределение кучи только тогда, когда количество элементов превышает определенный предел?Подобно тому, что делает большинство std::string
реализаций.
Фон
Контейнер используется в следующем (упрощенном) контексте:
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)
{
// ...
}
Эта часть кода имеет высокую частоту вызовов, но пометить элемент довольно редко, число элементов в someContainer
обычно мало, но не связано.Я не могу легко использовать предварительно выделенный «более глобальный» буфер.Цель состоит в том, чтобы избежать частого распределения.
Частота вызовов
- Общее: ни один элемент не помечается.std :: vector нормально
- Общее: помечается только один из нескольких элементов.вызывает высокочастотное распределение, которое я хочу избежать
- Очень редко, но должно поддерживаться: someList увеличивается при первом проходе, количество элементов не предсказуемо, но все еще низко