当前位置:C++技术网 > 资讯 > 流迭代器stream_iterator中无参数输入迭代器的分析

流迭代器stream_iterator中无参数输入迭代器的分析

更新时间:2016-03-19 20:42:02浏览次数:1+次

先看个代码:
#include<iostream> 
#include<iterator> 
#include<string> 
#include "windows.h" 
#include "algorithm" 
#include "fstream"
using namespace std; 

int main() 
{ 
ifstream file("c:\\存储2.txt");
istream_iterator<string> in_iter(file),eof;         //注意:stream_iterator<string> in_iter(cin)要求第一次输入 
//sort(in_iter,eof); 
/*ostream_iterator<string> out_iter(cout," ");  // 绑定流对象cout,元素之间分隔符为换行 
while(in_iter!=eof) 
{  
*out_iter=*in_iter;    //输入流解引用,取得值后,给输出流,输出。 
++out_iter; 
++in_iter; 
} */
copy(in_iter,eof,ostream_iterator<string>(cout," "));
system("pause"); 
}
这个代码是在《利用STL中的fstream,istream_iterator来打开文件内容》(http://www.cjjjs.com/paper/lkkj/2016229143445213.aspx)中的,不过,我优化了代码,在这里,我们来断点调试看看无参数输入迭代器eof的值,不过如果你没有基础的话,请看《 stream iterators源代码详解》《STL中流迭代器的学习》。

也就是说,这里的输入界定符就是空格,一旦遇到空格,就执行输出流迭代器的代码。
我们再看一段代码:
#include "algorithm"
#include "iostream"
#include "iterator"
#include "vector"
#include "windows.h"

using namespace std;

int main()
{
vector<int> data;
istream_iterator<int> in(cin);
istream_iterator<int> eof;
copy(in,eof,back_inserter(data));

sort(data.begin(),data.end());

copy(data.begin(),data.end(),ostream_iterator<int>(cout," "));

system("pause");
}

我们可以看出,eof的值是负值,而我们输入的数都是整数,这表示,输入界定符就是特殊的值,即与我们输入的类型不同就行。