【牛客带你学编程C++方向】项目练习第9期(参考答案)
参考答案及注意事项:
在vector中使用erase会导致迭代器失效,举个例子,假如一个vector中的元素{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},使用如下方式实现删除偶数元素:
//此处是错误的展示
for(auto vbegin = va.begin(); vbegin != va.end(); ++vbegin)
{
if(!(*vbegin % 2))
{
va.erase(vbegin);
}
}
更好理解的方式是重新定义一个新的迭代器,参考:
https://www.cnblogs.com/wuchanming/p/3913681.html
https://www.cnblogs.com/wuchanming/p/3913681.html
正确答案:
#include<vector>
#include<list>
#include<iostream>
using namespace std;
int main()
{
vector<int> vec={0,1,1,2,3,5,8,21,55,89};
list<int> li={0,1,1,2,3,5,8,21,55,89};
auto ve=vec.begin();
auto it=li.begin();
while(ve!=vec.end())
{
if(*ve%2)
++ve;
else
ve=vec.erase(ve);
}
while(it!=li.end())
{
if(*it%2)
it=li.erase(it);
else
++it;
}
for(auto v:vec)
cout<<v<<" ";
cout<<endl;
for(auto i:li)
cout<<i<<" ";
cout<<endl;
return 0;
}
Tips:
牛客带你学编程-C++方向:【牛客带你学编程】【C++方向】0基础小白入门培养计划!
查看7道真题和解析
