以下的代码,我主要有几个问题,
一,应该如何理解
istream_iterator<string> eos{}; // input sentinel
我认为,这应该就是一个结束的标志,其内部肯定是有一个类似于约定俗成的一个流迭代器结束的标志。
二,如何理解
ostream_iterator<string> oo{os, "\\n"}; // output iterator for stream
书上面是这样说的,
The ostream_iterator’s second argument is used to delimit output values.
经过实际的实验,发现其实是把输入流中的那些一个个单独的元素在输出到 to
这个文件中时,用第二个参数分隔开,这里用的是换行符,也可以换成 \\t
这样的制表符或者其他的符号。
三,如何理解
sort(b.begin(), b.end()); // sort the buffer
这里的 buffer
其实就是 vector。
最后,那个 unique_copy()
其实就是会把 vector 中重复的元素给去掉嘛。后面把 vector 换成了 set,这样就不需要在复制的时候去除了,因为在把元素加入 set 中时,这个数据结构自己就会作一层判断。
#include "../../headers/bookheaders.h"
using namespace std;
int main(int argc, char const *argv[]) {
string from, to;
cin >> from >> to; // get source and target file names
ifstream is{from}; // input stream for file "from"
istream_iterator<string> ii{is}; // input iterator for stream
istream_iterator<string> eos{}; // input sentinel
ofstream os{to}; // output stream for file "to"
ostream_iterator<string> oo{os, "\\n"}; // output iterator for stream
vector<string> b{ii, eos}; // b is a vector initiallized from input [ii:eos)
sort(b.begin(), b.end()); // sort the buffer
unique_copy(b.begin(), b.end(), oo); // copy buffer to output, discard replicated values
return !is.eof() || !os; // return error state
}