上海巨人网络科技有限公司面试题!有兴趣的来看看!
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失效
[解决办法]
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); }
[解决办法]
没看懂...
[解决办法]
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++); }
[解决办法]
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楼正解
[解决办法]
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的...
[解决办法]
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
[解决办法]
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; }
[解决办法]
学习
[解决办法]
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++);
}
}
[解决办法]
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
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;
}