Ant*_*Ant 3 c++ boost boost-bind ref remove-if
我有一个std ::类列表,并希望删除标记为删除的条目.我正在使用std :: remove_if和erase.
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());
}
};
Run Code Online (Sandbox Code Playgroud)
我正在一个小型处理器上运行,内存分配和释放非常昂贵.此删除在我的应用程序中调用new并删除数千次.
我以前在使用boost::ref非平凡变量作为绑定参数时使用过,但在这种情况下,我认为它可能是仿函数本身的创建和破坏,或者是造成问题的复制.
我想做点什么
boost::bind(&MyClass::isDone, boost::ref(this), boost::ref(_1));
Run Code Online (Sandbox Code Playgroud)
我找不到有关正在创建和销毁的内容的文档.所以我的简单问题是如何提高效率呢?
尝试更换呼叫std::remove_if用std::list::remove_if.后者应该只复制前面和后面元素的一些指针,而不是试图将元素移动到列表的末尾,这是你看到的多重分配的原因.另一个好处是,因为它是一个成员函数std::list,它实际上删除(即擦除)符合您标准的元素.
class MyClass
{
bool isDone(MyData& myData)
{
return myData.isDone();
}
void removeIfDone(std::list<MyData>& myList)
{
myList.remove_if( boost::bind( &MyClass::isDone, this, _1 ) );
}
};
Run Code Online (Sandbox Code Playgroud)