这次是一条找错题,我们有如下代码:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
typedef vector IntArray;
IntArray array;
array.push_back(1);
array.push_back(2);
array.push_back(2);
array.push_back(3);
for(IntArray::iterator itor = array.begin(); itor != array.end(); ++itor)
{
if(2 == *itor)
array.erase(itor);
}
return 0;
}
问:这个代码能否正确得到我们期待的结果(删除容器中的值为2的项)?
首先,这个代码是不能编译通过的,原因是typedef vector IntArray这句没有指明容器的数据类型,应更改为typedef vector<int> IntArray。。
其次,这个代码对于连续的两个2,只能删除一个,因为erase()方法执行后,后面的元素会自动向上移动一个单位,此时如果itor没有及时回退的话,就会miss掉一个元素,我们作如下修改:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
typedef vector<int> IntArray;
IntArray array;
array.push_back(1);
array.push_back(2);
array.push_back(2);
array.push_back(3);
for(IntArray::iterator itor = array.begin(); itor != array.end(); ++itor)
{
if(2 == *itor)
{
array.erase(itor);
itor--;
}
}
return 0;
}
此时就可以得到我们期望的结果了。。