第十章 10.4.2节练习

练习10.29

编写程序,使用流迭代器读取一个文本文件,存入一个vector中的string里。

解答:

#include <iostream>
#include <fstream>
#include <vector>      
#include <string>
#include <iterator>

using namespace std;

int main() {
<span style="white-space:pre">	</span>//ifstream in("file_name"); // 这样创建文本输入流
<span style="white-space:pre">	</span>istream_iterator<string> in_iter(cin); //为了简化该题,不去创建一个文本文件,而直接从标准输入中读取
<span style="white-space:pre">	</span>istream_iterator<string> eof;


<span style="white-space:pre">	</span>vector<string> isvec(in_iter, eof);


// <span style="white-space:pre">	</span>while (in_iter != eof){
// <span style="white-space:pre">		</span>isvec.push_back(*in_iter++);
// <span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>for (auto i : isvec){
<span style="white-space:pre">		</span>cout << i << " ";
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>cout << endl;


<span style="white-space:pre">	</span>return 0;
}

练习10:30

使用流迭代器、sort和copy从标准输入读取一个整数序列,将其排序,并将结果写到标准输出。

解答:

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

using namespace std;

int main() {
	istream_iterator<int> in_iter(cin), eof;
        ostream_iterator<int> out_iter(cout, ", ");

	vector<int> isvec(in_iter, eof);
	sort(isvec.begin(), isvec.end());

	copy(isvec.begin(), isvec.end(), out_iter); // 10.30

	return 0;
}
多谢 如烟花非花 同学的提示。


练习10.31

修改前一题的程序,时期只打印不重复的元素。你的程序应使用unique_copy.(参见10.4.1节,第359页)

解答:

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

using namespace std;

int main() {
	istream_iterator<int> in_iter(cin), eof;
        ostream_iterator<int> out_iter(cout, ", ");

	vector<int> isvec(in_iter, eof);
	vector<int> result;

	sort(isvec.begin(), isvec.end());
	unique_copy(isvec.begin(), isvec.end(), out_iter); // 10.31
	return 0;
}
多谢 如烟花非花 同学的提示。


练习10.32

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

解答:

程序有些长,还有头文件。就不贴出来。

写一下思路吧,具体的实现前面都做过了,只需要做一些简单的改动就可以用了。

使用10.29的方式来保存交易记录。

然后,用得到的对应vector进行sort排序。

使用find应该是为了满足一定的条件,然后,将满足条件的元素使用accumulate进行求和操作。


练习10.33

编写程序,接受三个参数:一个输入文件和两个输出文件的文件名。输入文件保存的应该是整数。使用istream_iterator读取输入文件。

使用ostream_iterator将奇数写入第一个输出文件,每个值之后都跟一个空格。将偶数写入第二个输入文件,每个值都独占一行。

解答:

#include <iostream>
#include <fstream>   
#include <string>
#include <iterator>

using namespace std;

void myFunc(const string& in, const string& out1, const string& out2){
	ifstream fin(in);
	ofstream fout1(out1);
	ofstream fout2(out2);

	istream_iterator<int> in_iter(fin), eof;

	ostream_iterator<int> odd(fout1, " ");
	ostream_iterator<int> even(fout2, "\n");

	for (; in_iter != eof; ++in_iter){
		if ((*in_iter) % 2){
			odd = *in_iter;
		}
		else {
			even = *in_iter;
		}
	}
}

int main() {
	myFunc("test.txt", "odd.txt", "even.txt");

	return 0;
}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值