C++ primer | 第八章 IO 库
来源:互联网 发布:各编程语言比较 编辑:程序博客网 时间:2024/06/06 09:02
C++ 不直接处理IO,而是通过standard library 中的一些types来handle在files、console windows、及内存中的io。
8.1 IO 类
IO定义了三个独立的头文件 分别用于读写流的基本类型、命名文件、内存,分别是iostream fstream sstream。标准库能通过继承机制使我们忽略这些不同类型的流之间的差异,例如类型ifstream istringstream 都继承自istream。
下面是标准库流的一些特性
8.1.1 IO对象无拷贝或赋值
8.1.2 条件状态
IO类定义了一些函数和标志,来帮助我们访问和操纵流的条件状态(condition state)。
badbit :系统级错误,不可修复,(此时failbit也会被置位)
failbit :可以修复的错误
eofbit :文件结束(此时failbit也会被置位)
管理条件状态
//复位failbit/badbit,其他不变cin.clear(cin.rdstate()&~cin.failbit&~cin.badbit);
8.1.3管理输出缓冲
缓冲区刷新的原因:
- 程序结束,注意如果是崩溃不会被刷新
- 缓冲区满
- endl等
- unitbuf清空,cerr默认设置unitbuf,如果想要在每次输出都会刷新缓冲区就使用cout<
endl//输出缓冲区+换行flush//输出缓冲区ends//输出缓冲区+空格
关联输入和输出流
tie是关联的关键字
cin.tie(&out);//输入与输出关联ostream *old_tie=cin.tie(nullptr);
每个流同时最多关联到一个流,但是多个流可以同时关联到同一个ostream。
8.2 文件输入和输出
8.2.1 使用文件流对象
ifstream in(ifile);//构造一个ifstream并且打开给定文件
当一个fstream对象被销毁时,close会自动被调用
8.2.2 文件模式
inoutappatetruncbinary
这些标识符可以被组合使用,中间以”或”操作符(|)间隔。
8.3 string 流
8.3.1 使用istringstream
//P288string line,word;vector <PersonInfo> people;while (getline(cin,line)){ PersonInfo info; istringstream record(line);//record 是一个istringstream对象 绑定line record >>info.name;//读取名字 while (record>>word) info.phones.push_back(word); people.push_back(info);
8.3.2 使用ostringstream
对每个人,验证完所有的电话号码之后进行输出操作
for (const auto &entry :people){ ostringstream formatted,badNums; for (const auto &nums:entry.phones){ if (!valid(nums)){ badNums<<""<<nums;//将数的字符串形式存入badNums }else formatted<<""<<format(nums); } if (badNums.str().empty()) os<<entry.name<<" " <<formatted.str()<<endl; else cerr<<"input error:"<<entry.name <<"invalid number(s)"<<badNums.str()<<endl; }
以上的写入操作,实际上是转换为string操作。
总结
- 1 IO 类
- 11 IO对象无拷贝或赋值
- 12 条件状态
- 13管理输出缓冲
- 2 文件输入和输出
- 21 使用文件流对象
- 22 文件模式
- 3 string 流
- 31 使用istringstream
- 32 使用ostringstream
- 1 IO 类
- 总结
0 0
- c++primer学习笔记 ( 第八章 标准IO库)
- C++Primer笔记 第八章 标准IO库
- 【c++primer】第八章01——标准IO库
- C++primer第五版笔记-第八章IO库
- IO库总结——C++Primer第八章
- C++primer第4版第八章标准IO库
- C++PRIMER第一轮复习第八章 IO库
- C++ Primer 第八章 标准IO库
- C++ Primer 第八章 标准IO库
- C++ Primer 第八章 标准IO库
- C++ Primer:第八章:IO库
- C++ Primer:第八章:IO库(续)
- 【c++ primer 笔记】第八章 IO库
- C++ primer | 第八章 IO 库
- c++primer 第八章IO操控流的条件状态
- C++primer 第八章
- c++primer 第八章
- C++Primer学习笔记第八章(8/18)标准IO库
- Map集合常用方法
- 看博客的日常
- C++ 链表实现
- Spring定时任务的简单例子(转载)
- Java-面向对象(高级篇)--接口的基本概念
- C++ primer | 第八章 IO 库
- JSON详解
- GRASS GIS学习一
- iframe页面跳转
- package com.example.eTextView省略和Ellipsize回调监听;
- HEVC代码学习2:TAppEncTop::encode函数
- Redis 的持久化机制
- iOS数组去除重复的元素的4种方法
- 最长回文子字符串(Longest Palindromic Substring)