清除列表中元素的问题

Chr*_*_vr 1 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);          
    }

}
Run Code Online (Sandbox Code Playgroud)

我这样做它正在崩溃for循环.我认为这是由于erase(); 我在这里做错了吗?请建议我这个

Naw*_*waz 6

你应该写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++;
}
Run Code Online (Sandbox Code Playgroud)

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