C++ ATL 中list中删除操作
2016-01-11 19:57
309 查看
初学者在使用链表删除遍历中经常会报这样一个错误:list iterator not incrementable,错误的原因可能如下
for (it = stu.begin();it != stu.end();it++)
{
if (strcmp(p,it->m_Name) == 0)
{
it = stu.erase(it);
}
}
因为earse后会把迭代器释放掉,故再一次for循环的时候则会报错。
正确的方法只要稍微改动一下就可以实现了,
下面说下如何删除一个对象数据,只要在erase()后面加上break语句即可
for (it = stu.begin();it != stu.end();)
{
if (strcmp(p,it->m_Name) == 0)
{
it = stu.erase(it);
break;
}
else{
it++;
}
}
如果要删除掉所有匹配的数据,则把break去掉即可.
for (it = stu.begin();it != stu.end();it++)
{
if (strcmp(p,it->m_Name) == 0)
{
it = stu.erase(it);
}
}
因为earse后会把迭代器释放掉,故再一次for循环的时候则会报错。
正确的方法只要稍微改动一下就可以实现了,
下面说下如何删除一个对象数据,只要在erase()后面加上break语句即可
for (it = stu.begin();it != stu.end();)
{
if (strcmp(p,it->m_Name) == 0)
{
it = stu.erase(it);
break;
}
else{
it++;
}
}
如果要删除掉所有匹配的数据,则把break去掉即可.
相关文章推荐
- c/c++中指针的理解(初学者)
- 【复数的四则运算(C++)】
- iOS第五天 C语言 函数
- log4cpp安装使用
- C/C++文件操作效率比较——FILE/fstream
- c++ 模板 迭代器 使用问题解决方法(too few template-parameter-lists)
- C++浮点数输出位数控制相关函数
- 热门游戏 2048 C++ 源代码分享
- C++虚函数的底层实现原理
- Leetcode 16 - 3Sum Closest
- C语言-C的世界观
- C++入门(14):动态内存管理
- 深入理解C语言(包含oop的思想,内存和管理,I/O的实现)
- C++ 检测物理内存以及磁盘空间
- 在Windows下C++获得程序路径
- 小明交换牌(C语言版)
- 使用工厂方法模式和策略模式封装常用排序算法
- C++Builder串口通信设计(二)-发送字节包
- C++builder串口通信设计(一)-串口接收数据
- Leetcode 14 - Longest Common Prefix