【发布时间】:2018-06-14 13:33:15
【问题描述】:
我目前在我的应用程序中使用 std::list 并尝试解决超出范围的问题。
我确实需要在迭代时在一个对象的方法中使用 pop_back。我认为它可能会以某种方式改变 std::list::end 。有没有可能让它正常工作?这段代码应该和这个类似:
编辑:我使用的是 GCC 6.1
编辑 2:如果您遇到与 reverse_iterator 相关的相同问题,我建议您尽可能重新设计应用程序并使用临时迭代器。更直观。
#include <list>
struct Object;
std::list<Object*> list;
struct Object
{
Object(bool state) : state(state) {}
bool state;
void method()
{
if(state) list.pop_back();
}
};
int main()
{
list.push_back(new Object(false));
list.push_back(new Object(true));
list.push_back(new Object(false));
for(auto it = list.rbegin(); it != list.rend(); ++it)
{
(*it) -> method();
}
return 0;
}
【问题讨论】:
-
我正在关闭它缺少 MCVE。从 cmets 可以明显看出,问题是特定于特定编译器的,这里的示例并不完整。需要完整的细节。
-
@SergeyA 我不太确定。我已经链接到另一个具有类似问题的问题,该问题声称迭代器失效规则对于反向迭代器是不同的。
-
示例已完成。它抛出异常,这实际上是我的问题。
-
@AkasataAkasata 行为似乎取决于编译器和版本。请在问题中添加您的编译器、版本和编译标志。
-
我已经编辑了帖子。编译器是 GCC 6.1。
标签: c++ stdlist outofrangeexception