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循环。我认为这是由于delete();
我在这里做错什么了吗?请为此提出建议

最佳答案

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

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/

10-10 18:01