第二次学习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;
}
运行结果: