c++ - 删除列表中元素的问题

标签 c++

struct ScheduleTaskInfo
{
unsigned int nTaskID;
   __time64_t timeStartTime;
__time64_t timeEndTime; 
};

typedef list<ScheduleTaskInfo> SchedulerList;   

SchedulerList::iterator itrSchedulerList;    
for(itrSchedulerList = gSchedulerList.begin();itrSchedulerList != gSchedulerList.end();itrSchedulerList++)
{
    SYSTEMTIME st;
    GetLocalTime(&st);

    CTime ctSyatemTime(st);

    if (itrSchedulerList->timeEndTime == ctSyatemTime.GetTime())
    {

        itrSchedulerList = gSchedulerList.erase(itrSchedulerList);          
    }

}

我正在这样做,它在 for 循环中崩溃了。我认为这是由于 erase(); 我在这里做错了什么吗?请就此提出建议

最佳答案

你应该在 else-block 中编写 itrSchedulerList++ 为:

for(itrSchedulerList = gSchedulerList.begin();
                     itrSchedulerList !=gSchedulerList.end();)
{
    SYSTEMTIME st;
    GetLocalTime(&st);

    CTime ctSyatemTime(st);

    if (itrSchedulerList->timeEndTime == ctSyatemTime.GetTime())
    {

        itrSchedulerList = gSchedulerList.erase(itrSchedulerList);          
    }
    else
        itrSchedulerList++;
}

这确保您不会将其递增到列表末尾之外。 erase() 可能会返回结束迭代器,它将在您的版本的 for 循环中递增。

关于c++ - 删除列表中元素的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6544038/

相关文章:

c++ - Doxygen 生成的文档中显示了静态函数的模板特化

c++ - typedef char[4] A 和 typedef char (&A)[4] 有什么区别?

python - caffe 可以同时接收一批不同分辨率的输入吗?如果是这样怎么办?

c++ - 使用 GDB 调试时如何知道 bison 中变量的值?

c++ - 内联函数的局部静态/线程局部变量?

c++ - 格式化适合语言环境的日和月,不带年

c++ - 避免通过操作从私有(private)构造函数间接实例化

C++ 凸包使用格雷厄姆扫描算法

c++ - DMProcessConfigXML 用于 WM/CE 平台卸载时正在关闭正在运行的应用程序

c++ - 通知图标接收 WM_LBUTTONDBLCLK 但不接收 WM_CONTEXTMENU