我有以下类(class)。它有一个静态成员_list
,由该类的所有实例共享,该成员将在Class_f()
中创建。我想使用删除功能来删除 _list
的最后一个元素。
class myClass
{
private:
static list<int> _list;
public:
//constructors,destructors
void Class_f();
}
list<int> myCLass::_list;
void myClass::Class_f()
{
//..some code
list<int>::iterator it1;
it1=_list.end (); //erase for instance the last element _list
it1=_list.erase(it1);
//more code
}
然而,在编译时它会输出一条错误消息“列表迭代器不可递增”。为什么会给我这个错误?此外,为什么我不能使用像 _list.erase(_list.end())
这样更简单的东西来避免创建迭代器。
最佳答案
_list.end()
不是指向最后一个元素的迭代器。它是最后一个迭代器。你真的不能用它做任何事情。 C++'s iterator ranges are half-open .
但是,如果您确实遇到了编译器 错误,那么说明您没有向我们展示某些错误。
您更有可能看到来自运行时的调试器消息,其中 Debug模式下的标准库实现非常友好地发现了您尝试递增 _list.end()
(这将具有未定义的行为) ,这发生在为 _list.erase(it1)
准备返回值的过程中,并告诉你不要成为这样的傻瓜。 :)
关于c++ - 删除类列表的静态成员的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183560/