盛大游戏关于vector删除元素面试题

下列代码的输出为:

  1. #include "iostream"  
  2. #include "vector"  
  3. using namespace std;  
  4.   
  5. int main(void)  
  6. {  
  7.     vector<int>array;  
  8.     array.push_back(100);  
  9.     array.push_back(300);  
  10.     array.push_back(300);  
  11.     array.push_back(500);  
  12.     vector<int>::iterator itor;  
  13.     for(itor=array.begin();itor!=array.end();itor++)  
  14.     {  
  15.         if(*itor==300)  
  16.         {  
  17.             itor = array.erase(itor);  
  18.         }  
  19.     }  
  20.     for(itor=array.begin();itor!=array.end();itor++)  
  21.     {  
  22.         cout<<*itor<<" ";  
  23.     }  
  24.     return 0;  
  25. }  

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;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值