当前位置:C++技术网 > 资讯 > STL中流迭代器的学习

STL中流迭代器的学习

更新时间:2015-11-12 15:08:22浏览次数:1+次

第二次学习STL,觉得学的不再模糊,你在迷茫。看来真的进步了。流迭代器是三种迭代器之一。它是用来读写stream的迭代器。他们提供了必要的抽象性,使得来自键盘的输入项是一个群集。你能够从中读取内容。

不得不说STL的确简洁,我们看个小程序:


#include "iostream"
#include "vector"
#include "string"
#include "algorithm"
using namespace std;

int main()
{
	vector<string>coll;
	copy(istream_iterator<string>(cin),
		istream_iterator<string>(),
		back_inserter(coll));

	sort(coll.begin(),coll.end());
	unique_copy(coll.begin(),coll.end(),ostream_iterator<string>(cout,"\n"));
}
代码说明:istream_iterator<string>(cin)这会产生一个可以从”标准输入流cin"读取数据的stream iterator。
istream_iterator<string>()调用istream iterators的default构造函数,产生一个流结束符的迭代器。
ostream_iterator<string>(cout,"\n")最后输出一个换行符。
在学习的时候,我对于istream_iterator<string>(cin),istream_iterator<string>()这两句代码很不理解,没搞懂什么时候开始结束输入。我们还是通过代码来看看吧:
#include <iostream>
#include <string>       //用于人机界面交互
#include <vector>  //为了使用vector容器
#include <algorithm> //为了使用sort算法
#include <iterator>  //为了使用输入输出迭代器

using namespace std;

int main(void)
{
 typedef vector<int> IntVector;
 typedef istream_iterator<int> IstreamItr;
 typedef ostream_iterator<int> OstreamItr;
 typedef back_insert_iterator< IntVector > BackInsItr;
 // STL中的vector容器
 IntVector num;
 // 从标准输入设备读入整数
 // 直到输入的是非整型数据为止 请输入整数序列,按任意非数字键并回车结束输入
 cout << "请输入整数序列,按任意非数字键并回车结束输入\n";
 copy(IstreamItr(cin), IstreamItr(), BackInsItr(num));
 //提示程序状态
 cout << "排序中……\n";
 // STL中的排序算法
 sort(num.begin(), num.end());
 cout<<"排序完毕的整数序列:\n";
 copy(num.begin(), num.end(), OstreamItr(cout, "\n")); 
 //使输出窗口暂停以观察结果
 system("pause");
 return 0;
}
运行结果: