您的位置:首页 > 编程语言 > C语言/C++

C++ primer 第五版 中文版 练习 9.31 个人code

2014-08-27 22:50 357 查看
C++ primer 第五版 中文版 练习 9.31

题目:第316页中删除偶数值元素并复制奇数值元素的程序不能用于list或forward_list。为什么?修改程序,使之也能用于这些类型。

答:

list 不支持+的操作,forward_list不支持直接insert,必须要有个前驱。

/*
第316页中删除偶数值元素并复制奇数值元素的程序不能用于list或forward_list。为什么?
修改程序,使之也能用于这些类型。
*/

#include <iostream>
#include <list>
#include <forward_list>

using std::cout;
using std::endl;
using std::list;
using std::forward_list;

int main()
{
list<int> llist = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
forward_list<int> flist = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

cout << "操作前list容器的内容为:";
for (auto &a : llist)
cout << a << " ";
cout << endl;

auto iter = llist.begin();
while (iter != llist.end())
{
if (*iter % 2)
{
iter = llist.insert(iter, *iter);
++iter;
++iter;
}
else
{
iter = llist.erase(iter);
}
}
cout << "操作后list容器的内容为:";
for (auto &a : llist)
cout << a << " ";
cout << endl;

cout << "操作前forward_list容器的内容为:";
for (auto &a : flist)
cout << a << " ";
cout << endl;

auto tmpiter = flist.before_begin();
auto iter1 = flist.begin();
while (iter1 != flist.end())
{
if (*iter1 % 2)
{
iter1 = flist.insert_after(iter1, *iter1);
tmpiter = iter1;
++iter1;

}
else
{
iter1 = flist.erase_after(tmpiter);
}
}
cout << "操作后forward_list容器的内容为:";
for (auto &a : flist)
cout << a << " ";
cout << endl;

return 0;
}
执行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: