C++ std :: list迭代器可以移动到最后吗?

Gan*_*458 1 c++ iterator stl list

for(std::list<MyClass *>::iterator it = m_currentJobs.begin(); it != m_currentJobs.end(); ++it)
{
    request = *it;
    if(request != NULL)
    {
        printf(request->status());
    }

    delete request;
    m_currentJobs.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

迭代器是否有可能指向列表末尾之外的一些垃圾数据?

小智 6

通过擦除它使您的迭代器无效.

您可以将循环更改为:

std::list<MyClass *>::iterator it = m_currentJobs.begin();
while(it != m_currentJobs.end())
{
    // ...
    it = m_currentJobs.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

并回答你的问题:是的,可能有一个无效的迭代器(不限于过去的迭代器).使用这些涉及未定义的行为.