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(); 我在这里做错了吗?请建议我这个
你应该写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在您的版本的循环中递增.