在C++中,很多人都会选择使用cin来进行数据的输入,使用cout来进行数据的输出,现在在C++11中我们可以使用iostream迭代器来进行这些操作,这会减少代码量,达到的效果和前面两种相同。以下是我学习中的总结,不够完善之处望指导:
使用istream_iterator来输入数据。
在我们创建一个流迭代器的时候,必须制定迭代器将要读写的对象类型。
//以下一般为数据接收的范围
istream_iterator int_it(cin);//从cin读取int类型的数据
istream_iterator int_oef;//尾后迭代器
下面是一个使用istream_iterator来向一个vector中写入string类型数据的例子:
#include "stdafx.h"
#include
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector vec;
istream_iterator item_in(cin), eof;//创建istream_iterator迭代器
while (item_in != eof)//向vec中读入string数据
{
vec.push_back(*item_in++);
}
cout << "vec中的数据为:" << endl;
for (auto v : vec)
{
cout << v << " ";
}
cout << endl;
system("pause");
return 0;
}
输入:a b v s
执行结果为:a b v s
使用ostream_iterator来打印数据
这里和上面一样我们首先需要创建一个对象,即ostrean_iterator out_iter(cout, " ");里面的第二个参数表示每输出一个数据后面跟上一个空格,第二个参数可以个人设置,这里是代表一下。下面是使用上面的例子和前面学习的sort()和copy(),从标准属兔读取一个整数序列,将其重新排列并将结果输出。
#include "stdafx.h"#include#include#include#include
using namespacestd;int _tmain(int argc, _TCHAR*argv[])
{
vectorvec;
istream_iteratoritem_in(cin), eof;while (item_in != eof)//使用流输入输入数据
{
vec.push_back(*item_in++);
}
cout<< "vec中的数据为:" <
{
cout<< v << " ";
}
cout<
sort(vec.begin(), vec.end());//定义流输出迭代器,每个数据后跟一个空格
ostream_iterator out_iter(cout, " ");//使用copy和流输出输出数据
copy(vec.cbegin(), vec.cend(), out_iter);
system("pause");return 0;
}
输入:1 2 4 3 5 7 6
执行结果为:1 2 3 4 5 6 7
从上面的两句话可以看出来,使用istream迭代器输入输出数据可以达到和cin、cout同样的效果,但是前者明显可以减少很多代码。