如何使用范围循环迭代器删除元素

How to remove an element using range loop iterator

我正在尝试从

中删除一个元素
std::list<std::future<void>> my_list;

使用

for(auto& itr:my_list) {
    if (/*something*/)
        my_list.erase(it)
}

无效!我相信是因为 std::future 是活字。如有任何建议,我们将不胜感激。

itr 不是迭代器,它是 std::future<void>.

类型

std::list::erase 只接受迭代器,所以你不能将 itr 这样的值传递给它。您将不得不退回到普通的迭代器循环来执行此操作。

您正在使用基于范围的 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 是一个函数 returns true if the future should be removed:

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
}