如何使用范围循环迭代器删除元素
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
}
我正在尝试从
中删除一个元素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
}