下海巨人网络科技有限公司面试题!有兴趣的来看看

上海巨人网络科技有限公司面试题!有兴趣的来看看!
std::list list1;
for(i=0;i<8;i++)
  list1.push_back(i);
for(std::list::iterator it=list1.begin();it!=list1.end();++it)
  {
  if(*it%2==0)
  list1.erase(it);
  }
此程序有什么错误,找出并写出正确程序。
 

------解决方案--------------------
erase之后iterator失效
------解决方案--------------------
C/C++ code

 list<int> list1; 
    for(int i=0;i <8;i++) 
        list1.push_back(i); 
    for(list<int>::iterator it=list1.begin();it!=list1.end();++it) 
    { 
        if(*it%2==0) 
            it=list1.erase(it); 
    }

------解决方案--------------------
没看懂...
------解决方案--------------------
C/C++ code
list<int> list1; 
    for(int i=0;i <8;i++) 
        list1.push_back(i); 
    for(list<int>::iterator it=list1.begin();it!=list1.end();) 
    { 
        if(*it%2==0) 
            list1.erase(it++); 
    }

------解决方案--------------------
C/C++ code
list<int> list1; 
    for(int i=0;i <8;i++) 
        list1.push_back(i); 
    for(list<int>::iterator it=list1.begin();it!=list1.end();) 
    { 
        if(*it%2==0) 
         it =  list1.erase(it); 
        else
           ++it;
    }

------解决方案--------------------
经测试,1楼2楼正解
------解决方案--------------------
C/C++ code

 list<int> list1; 
    for(int i=0;i <8;i++) 
        list1.push_back(i); 
    for(list<int>::iterator it=list1.begin();it!=list1.end();++it) 
    { 
        if(*it%2==0) 
            it=list1.erase(it);
        --it;
    }

------解决方案--------------------
erase之后iterator自动向后移位
忘了这是哪里说过的了
c++ primer里肯定有
------解决方案--------------------
一个是模板,一个是iterator
std::list<int> list1;
for(int i=0;i <8;i++)
list1.push_back(i);
for(std::list<int>::iterator it=list1.begin();it!=list1.end();++it)
{
if(*it%2==0)
it = list1.erase(it);
}
------解决方案--------------------
9楼的 就是C++PRIMER里有的哈
因为erase删除当前的然后指向后面的那一个,因为for循环里有自增了,所以要自减
------解决方案--------------------
我一面的时候就被问到了这道题目,结果不会,失败而回,就再也没有消息了,呜。。。。。
------解决方案--------------------
list<int> lst;
for( int i = 0; i < 8; ++i )
lst.push_back( i );
for( list<int>::iterator ite = lst.begin(); ite != lst.end(); )
{
if( *ite % 2 == 0 )
ite = lst.erase( ite );
else
++ite;
}
------解决方案--------------------
这么基本的问题竟然引出这么多答案,怀疑****的...
------解决方案--------------------
C/C++ code

list<int> list1; 
    for(int i=0;i <8;i++) 
        list1.push_back(i); 
    for(list<int>::iterator it=list1.begin();it!=list1.end();++it) 
    { 
        if(*it%2==0) 
           {
             it=list1.erase(it);
             --it;
           }     
    }

------解决方案--------------------
list是一个顺序容器,是一种模板,必须指明它的具体存储的是什么,也就要将它实列话。