利用输入输出流迭代器操作vector
//从输入流读入int数据,存到vector中,再输出显示
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<iterator>
using namespace std;
void main()
{
istream_iterator<int> in_iter(cin);//从cin读取int
istream_iterator<int> eof;//尾后迭代器
vector<int> vec;
while(in_iter!=eof)
vec.push_back(*in_iter++);
/*直接用cout输出
for(vector<int>::iterator it=vec.begin();it!=vec.end ();it++)
cout<<*it<<" ";
*/
//用输出流迭代器输出
ostream_iterator<int> out_iter(cout," ");
for(vector<int>::iterator it=vec.begin();it!=vec.end ();it++)
*out_iter++=*it;
/*
//新标准使用for输出
for(auto e:vec)
*out_iter++=e;
cout<<endl;
*/
/*使用copy到输出流迭代器输出vector元素
ostream_iterator<int> out_iter(cout," ");
copy(vec.begin(),vec.edn(),out_iter);
cout<<endl;
*/
}
使用accumulate算法操作流迭代器
//从输入流读入int数据,并输出所有输入数据的和
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<iterator>
#include<numeric>
using namespace std;
void main()
{
istream_iterator<int> in_iter(cin),eof;
cout<<accumulate(in_iter,eof,0)<<endl;
}
总结一下
istream_iterator的操作有:
istream_iterator<T> in(is); in从输入流is读取数据类型为T的值
istream_iterator<T> end; 读取类型为T的istream_iterator迭代器,标示尾后元素
*in 返回从流读取得数据
++in,in++ 使用元素类型所定义的>>运算符从输入流中读取下一个值,前置加版本返回一个纸箱递增后迭代器的引用,后置加版本返回旧值;
ostream_iterator的操作有:
ostream_iterator<T> out(os); out将类型为T的值写入到输出流os中
ostream_iterator<T> out(os,d); out将类型为T的值写入到输出流os中,每个值后面都输出一个d,d指向一个空字符结束的数组
out=val; 用<<运算符将val写入到out所绑定的ostream,valdez类型必须与out可写的类型兼容
*out,++out,out++ 不对out做任何事情,都返回out