gpt4 book ai didi

c++ - 删除和删除一个迭代器?

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:51 30 4
gpt4 key购买 nike

我正在像这样初始化并插入到列表中

_ARRAY_DETAIL* pAR = new _ARRAY_DETAIL;
pAR->sVar1 = 1;
pAR->nVar2 = 2;
m_SomeList.push_back(pAR);

我正在尝试从包含值 1 的列表中查找并删除所有内容,然后删除我们使用 new 创建的指针,我下面的示例是否以正确、有效的方式完成了这两项操作?

while(Iter != m_SomeList.end());
{
if((*Iter)->sVar1 == 1)
{
_ARRAY_DETAIL* pAR = *Iter;
Iter = m_SomeList.erase(Iter);
delete pAR; pAR = NULL;
}

Iter++;
}

最佳答案

一旦删除迭代器,它就不再有效。您需要在删除之前递增它。

if((*Iter)->sVar1 == 1) 
{
_ARRAY_DETAIL* pAR = *Iter;
m_SomeList.erase(Iter++);
delete pAR;
}
else
++Iter;

你是正确的erase returns an incremented iterator但我更喜欢在删除迭代器之前明确地执行此操作。

将 pAR 设置为 NULL 是多余的,因为它无论如何都会超出下一行的范围。

另请注意,如果您没有在 if 的其他部分递增 Iter,则应只递增它。

关于c++ - 删除和删除一个迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526136/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com