是否有一個容器僅對少數元素使用本地緩衝區,並且僅在元素數量超過某個限制時才使用堆分配?類似於大多數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增長,項目數量無法預測,但仍處於低位
你想使用靜態或堆棧分配?對於堆棧分配,請參閱http://stackoverflow.com/questions/354442/looking-for-c-stl-like-vector-class-but-using-stack-storage – nimrodm 2010-12-10 07:20:46
@nimrodn:堆棧分配可能是一個更好的描述我想要(固定標題)。即可以存儲在容器實例中的有限數量的元素(不需要額外的分配),並且如果不足夠使用堆分配。 – peterchen 2010-12-10 11:39:40
在插入至少一個元素之前`std :: vector`不分配任何內存。 – 2010-12-10 16:14:46