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/