概述
主要是记录一下关于Qt中STL删除数据元素的一些常见问题
使用remove接口删除:
STL中提供的删除接口remove并不是真正意义上的删除操作,而是使用下一个元素来替换当前元素,待删除的目标元素仍然存在;如果我们确信要删除某些元素时,需要使用erase接口去删除;
使用erase接口删除:
当使用这个接口去删除元素数据时,会改变迭代器的指向,目标元素被删除后,指向该元素的迭代器会自动指向下一个目标元素,因此,在实际使用中可能就会因为对迭代器的操作不当造成野指针的访问问题;正确的使用Demo如下:
for(QVector<int>::iterator iter = vec.begin();iter!=vec.end();++iter)
{
if(*iter == 2 )
{
iter = vec.erase(iter);
//重新修正迭代器的指向
iter--;
//让迭代器去指向下一个元素,这样for循环才不会出错
}
}
上面这个代码中仍然存在问题,如果vector中的所有数据都是2呢?那么在删除最后一个数据2时就会报错;
需要注意的是;如果在删除前,这个容器中只有一个数据,那么就是使用了这种方法也还是会报错;所以需要对容器中的数据数量进行一个判断;
使用迭代器删除容器方法如下:
for (vector<int>::iterator iter = tempVec.begin(); iter != tempVec.end(); )
{
if (tempVec.size() > 1)
{
iter = tempVec.erase(iter);
}
else
{
tempVec.clear();
break;
//必须要有,否则仍然会使用这个错误的迭代器,造成报错
}
}
最后
以上就是自然萝莉为你收集整理的Qt中关于STL迭代器的数据删除操作的全部内容,希望文章能够帮你解决Qt中关于STL迭代器的数据删除操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复