我试图从如何使用范围循环迭代
std::list<std::future<void>> my_list;
删除元素使用
for(auto& itr:my_list) {
if (/*something*/)
my_list.erase(it)
}
不起作用删除元素!我相信它是因为std::future
是可移动的类型。任何意见,将不胜感激。
我试图从如何使用范围循环迭代
std::list<std::future<void>> my_list;
删除元素使用
for(auto& itr:my_list) {
if (/*something*/)
my_list.erase(it)
}
不起作用删除元素!我相信它是因为std::future
是可移动的类型。任何意见,将不胜感激。
您正在使用基于范围的for循环。这样的循环不能用来擦除容器中的元素。你可以使用std::remove_if
代替:
auto new_end = std::remove_if(my_list.begin(), my_list.end(), cond);
my_list.erase(new_end, my_list.end());
其中cond
是返回true
如果未来应删除功能:
bool cond(const std::future<void>& fut)
{
if (/* something */)
return true; // fut will be erased from list
else
return false; // fut will be kept in list
}
itr
不是迭代器,它是std::future<void>
类型。
std::list::erase
只接受迭代器,所以你不能传递一个像itr
这样的值给它。你将不得不退回到一个正常的迭代器循环来做到这一点。
这个问题不应该与“MovableType的”被标记。 Movable Type是一个类似于Wordpress的内容管理系统。 –