擦除列表中的元素时出现问题
Problem in erasing element in list
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);
}
}
我正在做这件事,它正在循环中崩溃。我认为这是由于擦除((;我在这里做错什么了吗??请向我推荐这个
您应该将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
循环中递增。
当您将迭代器重新分配给erase
的返回时,您不应该增加迭代器,因为您将有效地跳过一个元素。把它放在一个额外的else
块中:
if (itrSchedulerList->timeEndTime == ctSyatemTime.GetTime())
{
itrSchedulerList = gSchedulerList.erase(itrSchedulerList);
}
else
{
++itrSchedulerList;
}
并将其从for循环中取出。
相关文章:
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 这个返回元素位置的基于循环的函数有什么问题?
- 缺少数组元素问题
- C++字符串问题-如何访问字符串元素
- std::p artition 的问题,用于分离小于枢轴的元素
- 我的选择排序代码是否存在导致它跳过数组中的元素的问题?
- 当索引位于末尾和空数组时,向数组插入元素时出现问题
- 创建 std::set 只复制一个元素,如何解决这个问题?
- 与 C++ 中一行中的用户输入数组元素相关的问题
- 当我向 vector<int *> 添加元素时,我遇到了一些问题
- 循环遍历向量<string>并保持每个元素"count"时出现问题
- 迭代列表以查找元素的出现.代码问题
- 检查是否所有 std::元组元素都满足条件 + 设计问题
- 元素计数问题
- 在 c++ 中从列表中擦除元素时出现问题
- 打印出列表元素问题
- 向量C ,获取向量的第二个元素有什么问题