下列代码的输出为:
- #include "iostream"
- #include "vector"
- using namespace std;
- int main(void)
- {
- vector<int>array;
- array.push_back(100);
- array.push_back(300);
- array.push_back(300);
- array.push_back(500);
- vector<int>::iterator itor;
- for(itor=array.begin();itor!=array.end();itor++)
- {
- if(*itor==300)
- {
- itor = array.erase(itor);
- }
- }
- for(itor=array.begin();itor!=array.end();itor++)
- {
- cout<<*itor<<" ";
- }
- return 0;
- }
A、100 B、100 300 500 C、100 500 D、程序错误
vector在erase之后,指向下一个元素的位置,其实进行erase操作时将后面所有元素都向前移动,迭代器位置没有移动。itor=array.erase(itor) erase返回下一个元素的地址,相当于给itor一个新值。
下面两种方法可以解决上述问题
#include "iostream"
#include "vector"
using namespace std;
int main(void)
{
vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(500);
vector<int>::iterator itor;
for(itor=array.begin();itor!=array.end();itor++)
{
if(*itor==300)
{
itor = array.erase(itor);
itor--;
}
//itor--;不可以
}
for(itor=array.begin();itor!=array.end();itor++)
{
cout<<*itor<<" ";
}
return 0;
}
#include "iostream"
#include "vector"
using namespace std;
int main(void)
{
vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(500);
vector<int>::iterator itor;
for(itor=array.begin();itor!=array.end();)
{
if(*itor==300)
{
itor = array.erase(itor);
}
else
{
itor++;
}
}
for(itor=array.begin();itor!=array.end();itor++)
{
cout<<*itor<<" ";
}
return 0;
}