【发布时间】:2013-02-23 01:25:59
【问题描述】:
我有一个 std::list 类并且想要删除标记为删除的条目。我正在使用 std::remove_if 和擦除。
class MyClass
{
bool isDone(MyData& myData)
{
return myData.isDone();
}
void removeIfDone(std::list<MyData>& myList)
{
std::list<MyData>::iterator it =
remove_if(myList.begin(), myList.end(),
boost::bind(&MyClass::isDone, this, _1));
myList.erase(it, myList.end());
}
};
我在一个小型处理器上运行,它的内存分配和释放非常昂贵。此删除在我的应用程序中调用了数千次 new 和 delete。
我之前在传递非平凡变量作为绑定参数时使用了boost::ref,但在这种情况下,我认为可能是仿函数本身的创建和销毁或它的复制导致了问题。
我想做类似的事情
boost::bind(&MyClass::isDone, boost::ref(this), boost::ref(_1));
我找不到有关创建和销毁内容的文档。所以我的简单问题是如何提高效率?
【问题讨论】:
-
您是否检查过
std::vector<std::unique_ptr<MyClass>>甚至std::vector<MyClass>是否不比list快?通常是 -
@andyt 谢谢你的建议。那是 4 年前的事了,我不再在那里工作,但我很确定我在使用列表,因为我需要列表的好处。
标签: c++ boost ref boost-bind remove-if