使用istream迭代器来输入输出数据

时间:2022-11-01 20:03:55

在C++中,很多人都会选择使用cin来进行数据的输入,使用cout来进行数据的输出,现在在C++11中我们可以使用iostream迭代器来进行这些操作,这会减少代码量,达到的效果和前面两种相同。以下是我学习中的总结,不够完善之处望指导:

使用istream_iterator来输入数据。

在我们创建一个流迭代器的时候,必须制定迭代器将要读写的对象类型。

//以下一般为数据接收的范围
istream_iterator<int> int_it(cin);//从cin读取int类型的数据
istream_iterator<int> int_oef;//尾后迭代器

下面是一个使用istream_iterator来向一个vector中写入string类型数据的例子:

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
vector<string> vec;
istream_iterator<string> 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<T> out_iter(cout, " ");里面的第二个参数表示每输出一个数据后面跟上一个空格,第二个参数可以个人设置,这里是代表一下。下面是使用上面的例子和前面学习的sort()和copy(),从标准属兔读取一个整数序列,将其重新排列并将结果输出。

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
vector<int> vec;
istream_iterator<int> item_in(cin), eof;
while (item_in != eof)//使用流输入输入数据
{
vec.push_back(*item_in++);
}
cout << "vec中的数据为:" << endl;
for (auto v : vec)
{
cout << v << " ";
}
cout << endl;
//将vec中的数据按照字典的顺序进行重新排列
sort(vec.begin(), vec.end());
//定义流输出迭代器,每个数据后跟一个空格
ostream_iterator<int> out_iter(cout, " ");
//使用copy和流输出输出数据
copy(vec.cbegin(), vec.cend(), out_iter);
system("pause");
return ;
}

输入:1 2 4 3 5 7 6

执行结果为:1 2 3 4 5 6 7

从上面的两句话可以看出来,使用istream迭代器输入输出数据可以达到和cin、cout同样的效果,但是前者明显可以减少很多代码。

使用istream迭代器来输入输出数据的更多相关文章

  1. Kettle提高输入输出数据总结

    1 mysql在数据连接是可以通过设置一下三个三处的方式 useServerPrepStmts=false       useCursorFetch=true      useCompression= ...

  2. 当使用listIterator进行迭代时候 list的迭代器可以在创建迭代器对象后 添加数据 但打印的时候不显示添加后的数据。 collection 的iterator迭代器不能添加数据 。list的对象与collection的实例对象都不能在创建迭代器后添加数据 list的迭代器保存的是循环前的数据长度

  3. 《C&plus;&plus;Primer》复习——with C&plus;&plus;11 &lbrack;3&rsqb;

    1.我们的程序经常使用很多IO库,用来输入输出例如:istream(输入流)类型,提供输入操作. ostream(输出流)类型, 提供输出操作. cin, 一个istream对象,从标准输入读取数据. ...

  4. Python【第五课】迭代器,生成器,数据序列化

    本节内容 列表生成式,生成器,迭代器 Json & pickle 数据序列化 1.列表生成式,生成器,迭代器 1.1 列表生成式 列表生成式?不就是生成个列表的表达式,恩~~~ 差不多. 一般 ...

  5. pandas小记:pandas数据输入输出

    http://blog.csdn.net/pipisorry/article/details/52208727 数据输入输出 数据pickling pandas数据pickling比保存和读取csv文 ...

  6. 大数据学习day15----第三阶段----scala03--------1&period;函数(&OpenCurlyDoubleQuote;&lowbar;”的使用&comma; 函数和方法的区别)2&period; 数组和集合常用的方法(迭代器,并行集合) 3&period; 深度理解函数 4 练习(用java实现类似Scala函数式编程的功能(不能使用Lambda表达式))

    1. 函数 函数就是一个非常灵活的运算逻辑,可以灵活的将函数传入方法中,前提是方法中接收的是类型一致的函数类型 函数式编程的好处:想要做什么就调用相应的方法(fliter.map.groupBy.so ...

  7. STL中,迭代器的分类

    五类迭代器如下: 1.输入迭代器:只读,一次传递    为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取.一个输 ...

  8. STL中的迭代器分类

      STL中迭代器的分类 五类迭代器如下: 1.输入迭代器:只读,一次传递    为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流i ...

  9. STL迭代器笔记

    STL迭代器简介 标准模板库(The Standard Template Library, STL)定义了五种迭代器.下面的图表画出了这几种: input         output \       ...

随机推荐

  1. MVC5&plus;EF6&plus;AutoMapper&plus;Bootstrap打造在线博客(1&period;1)

    DAL层的三个Model类: 字典表:CFDict 用户表:CFUser 用户爱好表:CFUserHobby(关联cfuser表和cfdict表) CFUser表和CFUserHobby表是一对多关系 ...

  2. hdu3437 划分树 区间内小于第K大的值得和

    Minimum Sum Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  3. 【Java】理解 UDDI 注册中心的 WSDL

    如何发布和查找 WSDL 服务描述 Web 服务描述语言(WSDL)有多种用法.特别是,根据应用程序的需要,WSDL 在 UDDI 注册中心有好几种使用方法.在这第 1 篇文章中(本系列共三篇),我们 ...

  4. nginx-lua实现简单权限控制

    1,依赖软件:nginx(openresty) mysql(存储用户表)redis(存储用户登录token,有效期1周) create table account( uid integer not n ...

  5. Wdatepicker日期控件的使用指南 &lpar;转&rpar;

    Wdatepicker日期控件的使用指南 标签: inputclass语言functionstring正则表达式 2012-02-10 15:48 40826人阅读 评论(5) 收藏 举报 .embo ...

  6. 为ASP&period;NetCore程序启用SSL

    紧接着上一篇搭建连接MySql的三层架构的ASP.NetCore2.0的WebApi的案例,这篇来实现为ASP.NetCore启用SSL支持 由于ASP.NetCore默认服务器Kestrel不像ii ...

  7. 自学Zabbix3&period;8&period;1&period;2-可视化Visualisation-Graphs自定义图表

    自学Zabbix3.8.1.2-可视化Visualisation-Graphs自定义图表 自定义图表,如名称所示,提供定制功能.虽然简单的图形可以很好地查看单个项目的数据,但是它们不提供配置功能.因此 ...

  8. 如何在Cocos2D游戏中实现A&ast;寻路算法&lpar;五&rpar;

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  9. 关于 extern &quot&semi;C&quot&semi;的说明

    在用C++的项目源码中,经常会不可避免的会看到下面的代码 #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplus ...

  10. system 系统调用、gcc编译过程

    system 库函数的功能是执行操作系统的命令或者运行指定的程序 #include <stdio.h> #include <stdlib.h>//引入库 int main() ...