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/