当前位置: 首页 > article >正文

C++ Primer第五版_第十章习题答案(31~40)

文章目录

      • 练习10.31
      • 练习10.32
      • 练习10.33
      • 练习10.34
      • 练习10.35
      • 练习10.36
      • 练习10.37
      • 练习10.38
      • 练习10.39
      • 练习10.40

练习10.31

修改前一题的程序,使其只打印不重复的元素。你的程序应该使用 unique_copy。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main()
{
	vector<int> v;
	istream_iterator<int> int_it(cin), int_eof;

	unique_copy(int_it, int_eof, back_inserter(v));
	sort(v.begin(), v.end());

	copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
	cout << endl;
	return 0;
}

练习10.32

重写1.6节中的书店程序,使用一个vector保存交易记录,使用不同算法完成处理。使用 sort 和10.3.1节中的 compareIsbn 函数来排序交易记录,然后使用 find 和 accumulate 求和。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <numeric>
#include "Sales_item.h"

int main()
{
	std::istream_iterator<Sales_item> in_iter(std::cin), in_eof;
	std::vector<Sales_item> vec;

	while (in_iter != in_eof)
		vec.push_back(*in_iter++);
	sort(vec.begin(), vec.end(), compareIsbn);
	for (auto beg = vec.cbegin(), end = beg; beg != vec.cend(); beg = end)
	{
		end = find_if(beg, vec.cend(), [beg](const Sales_item &item) { return item.isbn() != beg->isbn(); });
		std::cout << std::accumulate(beg, end, Sales_item(beg->isbn())) << std::endl;
	}

	return 0;
}

练习10.33

编写程序,接受三个参数:一个输入文件和两个输出文件的文件名。输入文件保存的应该是整数。使用 istream_iterator 读取输入文件。使用 ostream_iterator 将奇数写入第一个输入文件,每个值后面都跟一个空格。将偶数写入第二个输出文件,每个值都独占一行。

#include <fstream>
#include <iterator>
#include <algorithm>

int main(int argc, char **argv)
{
	if (argc != 4) return -1;

	std::ifstream ifs(argv[1]);
	std::ofstream ofs_odd(argv[2]), ofs_even(argv[3]);

	std::istream_iterator<int> in(ifs), in_eof;
	std::ostream_iterator<int> out_odd(ofs_odd, " "), out_even(ofs_even, "\n");

	std::for_each(in, in_eof, [&out_odd, &out_even](const int i)
	{
		*(i & 0x1 ? out_odd : out_even)++ = i;
	});

	return 0;
}

练习10.34

使用 reverse_iterator 逆序打印一个vector。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	for (auto it = v.crbegin(); it != v.crend(); ++it)
	{
		cout << *it << endl;
	}

	return 0;
}

练习10.35

使用普通迭代器逆序打印一个vector。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	for (auto it = std::prev(v.cend()); true; --it)
	{
		std::cout << *it << " ";
		if (it == v.cbegin()) break;
	}
	std::cout << std::endl;

	return 0;
}

练习10.36

使用 find 在一个 int 的list 中查找最后一个值为0的元素。

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

int main()
{
	list<int> l = { 1, 2, 0, 4, 5, 6, 7, 0, 9 };
	auto it = find(l.crbegin(), l.crend(), 0);

	cout << distance(it, l.crend()) << endl;
	return 0;
}

练习10.37

给定一个包含10 个元素的vector,将位置3到7之间的元素按逆序拷贝到一个list中。

#include <iostream>
#include <list>
#include <algorithm>
#include <vector>
#include <iterator>

using namespace std;

int main()
{
	vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	list<int> l;

	copy(v.crbegin() + 3, v.crbegin() + 8, back_inserter(l));

	for (auto i : l) std::cout << i << " ";
	cout << endl;
	return 0;
}

练习10.38

列出5个迭代器类别,以及每类迭代器所支持的操作。

  • 输入迭代器 : ==,!=,++,*,->
  • 输出迭代器 : ++,*
  • 前向迭代器 : ==,!=,++,*,->
  • 双向迭代器 : ==,!=,++,--,*,->
  • 随机访问迭代器 : ==,!=,<,<=,>,>=,++,--,+,+=,-,-=,*,->,iter[n]==*(iter[n])

练习10.39

list 上的迭代器属于哪类?vector呢?

  • list 上的迭代器是 双向迭代器
  • vector 上的迭代器是 随机访问迭代器

练习10.40

你认为 copy 要求哪类迭代器?reverse 和 unique 呢?

  • copy 需要两个输入迭代器,一个输出迭代器
  • reverse 需要双向迭代器
  • unique需要随机访问迭代器

http://www.kler.cn/a/7211.html

相关文章:

  • 使用Python和BeautifulSoup进行网页抓取:通过Python编程语言,结合BeautifulSoup库,可以轻松地从网站上抓取所需的信息。
  • 【c++笔试强训】(第十一篇)
  • 某某科技笔试题
  • 传奇996_24——变量lua
  • Windows下使用adb实现在模拟器中ping
  • PyAEDT:Ansys Electronics Desktop API 简介
  • leetcode53:最大子数组和
  • Kotlin 基础语法
  • 【数据库运维】mysql备份恢复练习
  • 【nnunet】个人数据训练心得
  • STL容器篇之stack和queue
  • 数学建模在大数据与数据挖掘、复杂网络与系统建模方面的应用
  • 如何让 a == 1 a == 2 a == 3 成立
  • iptables防火墙详解
  • Linux系统【Centos7】设置防火墙教程
  • record 替代 lombok, 我觉得不行
  • 58-Map和Set练习-LeetCode692前k个高频单词
  • AIGC之Stable Diffusion 提示词学徒库
  • 「ML 实践篇」回归系统:房价中位数预测
  • 使用机器学习opencv看手相
  • 嵌入式学深度学习:1、Pytorch框架搭建
  • 暴刷 SQL 导航
  • 探索五大机器学习技术及其应用
  • SSM整合
  • spring框架注解(纯注解)
  • c++类和对象