【发布时间】:2017-07-18 09:44:48
【问题描述】:
编辑:这个问题专门指 std::lists - Stack Overflow 上的其他类似问题指的是 std::vectors
我正在使用 C++,并且在迭代它时无法从 std::list 中擦除一个元素。我有一个自定义类的列表(为了这个问题,“对象”),我的代码如下所示:
for(auto i : Objects)
if(i.EraseFlag == true)
{
i = Objects.erase(i);
}
我收到错误:'没有匹配的函数调用 std::list::erase(Object&)'
我相信这是迭代列表、擦除元素并返回考虑擦除的迭代器的正确方法(从 C++11 开始),但显然我做错了什么。以前在使用向量时,我会使用“Objects.erase(Objects.begin() + i)”,其中 i 是 for 循环中的整数,但考虑到列表的访问要求,这将不起作用。
帮助表示赞赏。
谢谢
【问题讨论】:
-
erase() 以迭代器为参数
-
您不应在基于范围的
for循环期间更改序列。 -
我相信这是迭代列表、擦除元素并返回考虑擦除的迭代器的正确方法(从 C++11 开始), - - 当你可以使用
erase / removeidiom 来执行此操作时,为什么要删除这样的内容,而无需循环? -
看,no loops
-
感谢@PaulMcKenzie,remove_if 看起来是解决这个问题的正确方法 - 我已经尝试使用你的代码,但我现在收到“无效使用自动”错误 - 有什么想法吗?