首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-09-09 
上海巨人网络科技有限公司面试题!有兴趣的来看看!std::list list1for(i0i8i++)list1.push_back(i)fo

上海巨人网络科技有限公司面试题!有兴趣的来看看!
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;
}
[解决办法]
这么基本的问题竟然引出这么多答案,怀疑CSDN的...
[解决办法]
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是一个顺序容器,是一种模板,必须指明它的具体存储的是什么,也就要将它实列话。


[解决办法]
jf
[解决办法]

C/C++ code
std::list   list1; for(int i=0;i <8;i++)   list1.push_back(i); for(std::list::iterator it=list1.begin();it!=list1.end();) {   if(*it%2==0)     list1.erase(it)  else    ++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();++it)     {         if(*it%2==0)             it=list1.erase(it);     }
[解决办法]
好象erase(it)后,原it就无效了
[解决办法]
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
void main(){
list<int> list1; 
int i;
list<int>::iterator it;
for(i=0;i <8;i++)
list1.push_back(i);
for(it=list1.begin();it!=list1.end();++it)
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();++it)     {         if(*it%2==0)            {             it=list1.erase(it);             --it;           }         }
[解决办法]
up
[解决办法]
错了,还是这样正解!不需++iter或--iter
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);                        }         }
[解决办法]
quege
无心睡眠
错了,还是这样正解!不需++iter或--iter
----------------------------------------------------
你的第二种解法逻辑上还是有问题,只是凑巧答案是正确的。第一种解法才是正确的
%100正确的答案:
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++); //传值后自增,从而保证了it的值
}
else ++it;

热点排行