我试图从
中删除元素std::list<std::future<void>> my_list;
使用
for(auto& itr:my_list) {
if (/*something*/)
my_list.erase(it)
}
不起作用!我相信它是因为std::future
是可移动的类型。任何建议将不胜感激。
答案 0 :(得分:0)
@Html.ActionImage(null, null, "../../Content/img/Button-Delete-icon.png", Resource_en.Delete,
new{//htmlAttributesForAnchor
href = "#",
data_toggle = "modal",
data_target = "#confirm-delete",
data_id = user.ID,
data_name = user.Name,
data_usertype = user.UserTypeID
}, new{ style = "margin-top: 24px"}//htmlAttributesForImage
)
不是迭代器,它的类型为itr
。
std::list::erase
只接受迭代器,因此您无法将std::future<void>
之类的值传递给它。你将不得不回到正常的迭代器循环来做到这一点。
答案 1 :(得分:0)
您正在使用基于范围的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
}