gpt4 book ai didi

c++ - remove_if with boost::bind 很慢

转载 作者:太空狗 更新时间:2023-10-29 20:05:06 25 4
gpt4 key购买 nike

我有一个 std::class 列表,想删除标记为删除的条目。我正在使用 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。

我以前在传递一个非平凡变量作为绑定(bind)参数时使用过 boost::ref 但在这种情况下我认为它可能是仿函数本身的创建和销毁或复制它是导致问题的原因。

我想做类似的事情

boost::bind(&MyClass::isDone, boost::ref(this), boost::ref(_1));

我找不到关于正在创建和销毁的内容的文档。所以我的简单问题是如何 boost 效率?

最佳答案

尝试用 std::list::remove_if 替换对 std::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 ) );
}
};

关于c++ - remove_if with boost::bind 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15278108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com