输入输出迭代子
可以将标准输入对象cin组装成输入流迭代子(istream_iterator),也可以将标准输出对象组装成输出流迭代子(ostream_iterator),
以此来完成输入输出的操作。
输入流迭代器:
定义方法:istream_iterator<要从流中读取的数据类型> 迭代器名(绑定的流); //可以先不绑定流
例如:std::istream_iterator<int> inputInt(cin);
输出流迭代器:
定义方法:ostream_iterator<要从流中读取的数据类型> 迭代器名(绑定的流,元素分隔符); //输出流迭代器必须绑定流!
例如:std::ostream_iterator<int> outputInt(cout , "\n"); // 绑定流对象cout,元素之间分隔符为换行 ,有点类似于java中的printfln(),
实现了自动换行。
也可以这样定义:std::ostream_iterator<int> outputInt(cout); 元素分隔符不是必须的,但是这样就不能自动换行了
下面是一个使用的例子:
#include <iostream> using namespace std; #include <iterator> int main() { cout<<"Enter two integers: "; //创建一个输入流迭代器 std::istream_iterator<int> inputInt(cin); int num1 = *inputInt; //从输入流中读取一个整数 ++inputInt; //移动迭代器指向下一个整数 int num2 = *inputInt; //从输入流中读取下一个整数 cout<<"The sum si: "; //创建一个输出流迭代器 std::ostream_iterator<int> outputInt(cout,"\n"); *outputInt = num1 + num2; return 0; }
使用时要注意的几点:1.要使用istream_iterator对象和ostream_iterator对象,必须包含头文件iterator;
2.组装后的输入输出流迭代器只能读取指定数据类型的数据,否则就会抛出异常;
3.可以通过*操作符读取标准输入流中的内容,因为istream_iterator模板对*操作符进行了重载;
4.通过++运算符可以将迭代器移动到下一个输入数据处。