C++ vector 删除某一元素
2015-10-14 11:51
302 查看
在用Vector删除某一个元素的时候经常互出现不可思议的情况,例如:
vector<int> count;
count{0,0,0,437,0,0,0};
想要删除count中的0元素,使用如下程序:
vector <int>::iterator Iter;
for (Iter=count.begin();Iter!=count.end();Iter++)
{
if (*Iter==0)
{
count.erase(Iter);
Iter=count.begin();
}
}
经过处理后,count中仍然有0元素,输出的值为0,437。具体的原因:
问题出在for里的“Iter++”,留下的那个0应该是第二个0,因为删除第一个0后你重新赋值iter为begin(),由于已经删除第一个0,所以此时的begin为第二个0,然后经过第一次iter++,即iter指向第三个0,此时删除第三个0,然后有一次赋值begin(),重新指向第一个0,而for循环又到了iter++所以此时iter指向了437,如此类推,后面的所有0都没了,就剩下“0,437”!
修正代码如下:
vector <int>::iterator Iter;
for (Iter=count.begin();Iter!=count.end();)
{
if (*Iter==0)
{
count.erase(Iter);
Iter=count.begin();
}
else
{
Iter++;
}
}
vector<int> count;
count{0,0,0,437,0,0,0};
想要删除count中的0元素,使用如下程序:
vector <int>::iterator Iter;
for (Iter=count.begin();Iter!=count.end();Iter++)
{
if (*Iter==0)
{
count.erase(Iter);
Iter=count.begin();
}
}
经过处理后,count中仍然有0元素,输出的值为0,437。具体的原因:
问题出在for里的“Iter++”,留下的那个0应该是第二个0,因为删除第一个0后你重新赋值iter为begin(),由于已经删除第一个0,所以此时的begin为第二个0,然后经过第一次iter++,即iter指向第三个0,此时删除第三个0,然后有一次赋值begin(),重新指向第一个0,而for循环又到了iter++所以此时iter指向了437,如此类推,后面的所有0都没了,就剩下“0,437”!
修正代码如下:
vector <int>::iterator Iter;
for (Iter=count.begin();Iter!=count.end();)
{
if (*Iter==0)
{
count.erase(Iter);
Iter=count.begin();
}
else
{
Iter++;
}
}
相关文章推荐
- C++从Txt中读取内容
- C++获取可执行文件的路径
- C语言程序初体验
- c++ 容器学习 理论
- 剑指offer第六题【旋转数组的最小数字】c++实现
- C++调用C#的DLL程序实现方法
- 一些关于C++ 内存管理的比较好的文章,代码
- OpenGL C++
- c语言日常 10_10练习
- c语言日常 10_8练习
- 解析C++的虚函数表
- c++单例三种实现
- 堆排序C++
- 雪*C语言核心知识总结二
- C++ 类成员函数后面加 const关键字
- C语言程序100例之C#版-029
- Cpp--C++中排序常用(菜鸟上路,持续更新)
- 程序员---C语言细节7(增加两个整数溢出检测)
- C语言基础
- Longest Substring Without Repeating Characters - Leetcode