上面的方法:
// for (AnimInstMap::iterator i = mAnimInstMap.begin(); i != mAnimInstMap.end(); ++i)
// {
// std::string* animInst = i->second;
// if(animInst)
// printf("str is %s/n", animInst->c_str());
// else
// mAnimInstMap.erase(i--);
// }
下面的方法:
for (AnimInstMap::iterator i = mAnimInstMap.begin(); i != mAnimInstMap.end(); )
{
std::string* animInst = i->second;
if(animInst){
printf("str is %s/n", animInst->c_str());
++i;
}
else{
mAnimInstMap.erase(i++);
}
}
百子哥说的就是下面的方法~我自己想的是上面的方法~
mAnimInstMap[0] = new std::string("zhao");
mAnimInstMap[1] = NULL;
mAnimInstMap[2] = new std::string("zi");
写了个这样的测试没问题~
在实际中才发现。。。错误~当map中只有一个元素~然后,我们要在update中删除这个第一位置元素
然后就当掉了。。。
百子哥说:要相信。。。
本文通过一个简单的测试案例,对比了两种不同的迭代删除方法在C++ STL容器map中的使用情况及潜在问题,强调了正确处理迭代器失效的重要性。
1398

被折叠的 条评论
为什么被折叠?



