我有一个看起来像这样的类:
typedef std::list<char*> PtrList;
class Foo
{
public:
void DoStuff();
private:
PtrList m_list;
PtrList::iterator m_it;
};
该函数DoStuff()
基本上向其中添加元素m_list
或从中删除元素,找到其中某个特殊元素的迭代器并将其存储在m_it
. 需要注意的是,每个 的值m_it
都用于 的每个后续调用DoStuff()
。
所以有什么问题?
一切正常,除了分析显示由于调用 from导致操作员new
被调用过多。list::push_back()
DoStuff()
为了提高性能,我想m_list
在初始化时预分配内存,Foo
如果它是std::vector
. 问题是这会引入新的问题,例如:
- 效率较低
insert
且erase
元素较少。 m_it
一旦向量从一个调用更改为DoStuff()
下一个调用,它就会变得无效。编辑: Alan Stokes 建议使用索引而不是迭代器来解决这个问题。
我的解决方案:我能想到的最简单的解决方案是实现一个还具有链表功能的对象池。这样我就得到了一个链表,并且可以为它预分配内存。
我错过了什么还是它真的是最简单的解决方案?我宁愿不“重新发明轮子”,而是使用标准解决方案(如果存在)。
任何想法、解决方法或启发性的评论将不胜感激!