IO库

iostream类型:

  1. 不能拷贝或赋值。(只能以引用方式传递流)
  2. 读写会改变对象状态。(引用不能为const)
  3. 必须在使用之前检查对象的状态
  4. 迭代器将流作为特定元素的序列
  5. 可以为任何定义>>/<<的类型T创建输入/输出类型

istream(输入流类型)

  • istream对象
    cin:从标准输入读取数据

  • 从istream对象读取数据
    “>>”

string word;
//检测流的情况:流有效(没有文件结束标记/非法输入)
while(cin>>word)
    cout<<word<<endl;

getline函数:

  • 能够保留输入的空白符
  • 遇到换行符停止
  • 可以将getline的结果作为循环的判断条件
string s;
getline(cin,s);
  • 派生类
    ifsream:从文件读取数据

  • istream_iterator

    • 支持的操作:
      • ==/!=
      • 前置/后置递增
      • 解引用
      • in->mem/(*in).mem0
    • 标准库保证在解引用之前读取数据(并不保证立即读取)
    • 初始化
//in从输入流is读取类型为T的值
istream_iterator<T> in(is);
//定义为空的迭代器,可以作为尾后迭代器 
istream_iterator<T> end;

例如

ifsream in("hello");
//通过str_it读取字符串
istream_iterator<string> str_it(in);
istream_iterator<int> in_iter(cin),eof;
while(in_iter!=eof)
    //解运算符之后递增迭代器
    vec.push_back(*in_iter++);
//或者
vecotr<int> vec(in_iter,eof);    

ostream(输出流类型)

  1. ostream对象
    cout:向标准输出写入数据
    cerr:将程序错误信息写入标准错误

  2. 向ostream对象写入数据
    “<<”

  3. 派生类
    ofstream:向文件写入数据

  4. 每个对象都管理1个缓存区,用于保存程序读写的数据。

  5. 缓存刷新(数据写到输出设备或文件)CP281

    • 程序正常结束时执行return(注意当程序异常终止时不会刷新,调试时需要确认数据是否停留在缓存区)
    • 缓存区满
    • endl
    • 读写被关联的流时(默认时cin和cerr被关联到cout)
  6. ostream_iterator

    • 支持的操作:
      • out=val;//将val写入out(val和out的类型必须兼容)
      • 前置/后置递增(实际编译器不会做任何事情)
      • 解引用(实际编译器不会做任何事情)
    • 标准库保证在解引用之前读取数据(并不保证立即读取)
    • 初始化
//out将类型为T的值写到输出流os
ostream_iterator<T> out(os);
//每个值后面都额外输出空字符结尾的指针 
ostream_iterator<T> out(os,d);
ostream_iterator<int> out_iter(cout," ");
for(auto e:vec)
   //为了方便阅读和修改
   *out_iter++=e;
   //实际等于out_iter=e;
//也可以
copy(vec.begin(),vec>end(),out_iter);
cout<<endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值