练习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;
}