64,651
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;
int main(void)
{
int ia[] = {0, 1,1,2,3,5,8,13,21,55,89};
vector<int> ivec(ia, ia + (sizeof(ia)/sizeof(*ia)));
list<int> ilst(ia, ia + (sizeof(ia)/sizeof(*ia)));
/*
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
{
if(!(*iter % 2))
{
iter = ivec.erase(iter);
--iter;
}
}
*/
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout<<*iter<<" ";
cout<<endl;
return 0;
}
// 你的程序逻辑上没有错误,但是你忽略了ivec中的第一个元素是0,那么会执行
// if部分,执行完后iter将指向ivec的第一个元素,那么--iter将出错。
// 若将int ia[] 数组的第一个元素0去掉就不会出错了。
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end();++iter)
{
if(!(*iter % 2))
{
iter = ivec.erase(iter);
--iter;
}
}
#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;
int main(void)
{
int ia[] = {0, 1,1,2,3,5,8,13,21,55,89};
vector<int> ivec(ia, ia + (sizeof(ia)/sizeof(*ia)));
list<int> ilst(ia, ia + (sizeof(ia)/sizeof(*ia)));
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end();)
{
if(!(*iter % 2))
iter = ivec.erase(iter);
else
++iter;
}
return 0;
}
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); )
{
if(!(*iter % 2))
{
iter=ivec.erase(iter);
}
else
{
++iter ;
}
}
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
{
if(!(*iter % 2))
{
iter = ivec.erase(iter);
if(iter==ivec.begin())
{
cout<<“iter此时等于ivec.begin(),iter--是会挂的……<<endl;
}
--iter;
}
}
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); )
{
if(!(*iter % 2))
{
ivec.erase(iter ++);
}
else
{
++iter ;
}
}