第4版习题解答中所给答案不能成功运行,提示如下错误:
正确解答如下:
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main()
{
int ia[] = {1,1,2,3,5,8,13,21,55,89};
//k表示数组中元素的个数
int k = sizeof(ia)/sizeof(int);
vector<int> ivec(ia,ia + k);
list<int> ilst(ia,ia + k);
vector<int>::iterator pvec;
list<int>::iterator lit;
//删除ivec中的偶数元素
for (pvec = ivec.begin();pvec != ivec.end();)
{
//元素为偶数
if(*pvec % 2 == 0)
{
//注:当删除的是首元素时,删除后lit自动指向ilst的新的首元素
cout << "删除偶数: " << *pvec << endl;
pvec = ivec.erase(pvec);
}
else
++pvec;
}
//打印ivec中元素
for (pvec = ivec.begin();pvec != ivec.end();++pvec)
cout << *pvec << " ";
cout << endl;
//删除ilst中的奇数元素
for (lit = ilst.begin();lit != ilst.end();)
{
//元素为奇数
if(*lit % 2 == 1)
{
//注:当删除的是首元素时,删除后lit自动指向ilst的新的首元素
cout << "删除奇数: " << *lit << endl;
lit = ilst.erase(lit);
}
else
++lit;
}
//打印ilst中元素
for (lit = ilst.begin();lit != ilst.end();++lit)
cout << *lit << " ";
cout << endl;
return 0;
}
代码如下:
#include <iostream>
#include <list>
#include <string>
using namespace std;
int main()
{
list<string> slst;
cout << "input some strings(Ctrl + z to quit):" << endl;
string str,val;
while (cin >> str)
slst.push_back(str);
cout << "the value you want to find:" << endl;
cin.clear();
cin >> val;
list<string>::iterator sp;
int k = 0;
for (sp = slst.begin();sp != slst.end();)
{
if (*sp == val)
{
sp = slst.erase(sp);
k++;
}
else
++sp;
}
if(k == 0)
{
cout << "no such value!" << endl;
exit(-1);
}
for (list<string>::iterator sp = slst.begin();sp != slst.end();++sp)
cout << *sp << " ";
cout << "\nsuccess!" << endl;
return 0;
}