c++ - 删除类列表的静态成员的元素

标签 c++

我有以下类(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/

相关文章:

c++ - "C-style array"是什么意思,它与 std::array (C++ 风格)有何不同?

c++ - 如何从 QDataStream 中读取数组

c++ - 如何初始化 vector 的 vector 结构?

c++ - 如何将 "non trivially copyable objects"传递给 GCC 中的可变参数函数

c++ - 递归删除注册表项

C++:更改单个输出操作的格式输出

c++ - 如何将 dll 位置更改为 Codelite 中的子目录?

c++ - 检查文件是否只包含空格 C++

c++ - 两个数组之间的数据聚类和比较

c++ - 错误 : no match for 'operator-' in 'temp - 5'