我試圖從如何使用範圍循環迭代
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的內容管理系統。 –