c++标准之IO库
1.面向对象的标准库
2.多种IO标准库工具
- istream,提供输入操作
- ostream,提供输出操作
- cin:读入标准输入的istream对象.全局对象extern std::istream cin;定义于头文件
<iostream>
- cout:写到标准输出的ostream对象
- cerr:输出标准错误的ostream对象。常用语程序错误信息
- >>,用于从istream对象中读入输入.从左到右
- <<,用于把输出写到ostream对象中
- getline,功能是从istream对象读取一个单词,然后写入string对象中
3.IO类之间的关系
4.IO对象不可复制或赋值
流对象不能存储在vector或其他容器中。
形参或返回类型也不能为流类型,如果需要,则必须传递或返回指向该对象的指针或引用,而且不能是const引用,因为读写一个IO对象会改变其状态。
5.IO库的条件状态
流的状态由bad,fail,eof,good操作揭示。
标志
- iostate:机器相关的类型,表达条件状态。
- badbit:系统级的故障
- failbit:可恢复的错误,比如 把字符输入到数值变量中。
- eofbit:遇到文件结束符,fail也置位
- goodbit:流未处于错误状态,保证为0.
函数(s表示流
- s.bad(): 若badbit置位,返回true
- s.fail(): 若failbit置位,返回true
- s.eof(): 若eofbit置位,返回true
- s.good(): 若goodbit置位,返回true
- s.clear():流的所有条件状态位复位,将流的状态设为有效,void
- s.clear(flag):指定位复位,void
- s.setstate(flag):指定位 置位,void
- s.rdstate(): 返回当前流的条件状态,s.iostate
《cpp primer》p280 :只有当一个流处于无错状态时,才能从他读写数据。在使用流之前,应该检查它的状态,通常用while循环来检查。>>表达式返回的是流的状态。
使用good()和fail()是检查流总体状态的正确方法。将流当作条件的代码等价:!fail();
if(cin)
//ok to use cin, it is in a valid state
while(cin >> word)
//ok:read operation successful…
6.string流 <sstream>
公开成员函数 std::basic_stringstream::str
std::basic_string<CharT,Traits,Allocator> str() const; |
(1) | |
void str(const std::basic_string<CharT,Traits,Allocator>& new_str); |
(2) |
#include <sstream>
#include <iostream>
int main()
{
int n;
std::istringstream in; // 亦可使用 in("1 2")
in.str("1 2");
in >> n;
std::cout << "after reading the first int from \"1 2\", the int is "
<< n << ", str() = \"" << in.str() << "\"\n";
std::ostringstream out("1 2");
out << 3;
std::cout << "after writing the int '3' to output stream \"1 2\""
<< ", str() = \"" << out.str() << "\"\n";
std::ostringstream ate("1 2", std::ios_base::ate);
ate << 3;
std::cout << "after writing the int '3' to append stream \"1 2\""
<< ", str() = \"" << ate.str() << "\"\n";
}
after reading the first int from "1 2", the int is 1, str() = "1 2"
after writing the int '3' to output stream "1 2", str() = "3 2"
after writing the int '3' to append stream "1 2", str() = "1 23"
读取输入流的个人信息
struct PersonInfo
{
/* data */
string name;
vector<string> phones;
};
string line,word;
vector<PersonInfo> people;
while(getline(cin,line)){
PersonInfo info;
istringstream record(line);//line拷贝到record中
record >>info.name;
while(record>>word)
info.phones.push_back(word);
people.push_back(info);
/* code */
}
c++标准之IO库的更多相关文章
- [APUE]标准IO库(下)
一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
- 文件IO函数和标准IO库的区别
摘自 http://blog.chinaunix.net/uid-26565142-id-3051729.html 1,文件IO函数,在Unix中,有如下5个:open,read,write,lsee ...
- 《APUE》-第五章标准IO库
大多数UNIX应用程序都使用I/O库,本章说明了该库所包含的所有函数,以及某些实现细节和效率方面的考虑.同时需要重点关注标准I/O使用了缓冲的技术,但同时也是因为它的出现,产生了很多细节上的问题. 流 ...
- C++ Primer 读书笔记: 第8章 标准IO库
第8章 标准IO库 8.1 面向对象的标准库 1. IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于 ...
- 标准模板库——IO库
IO库设施: . istream(输入流)类型,提供输入操作. . ostream(输出流)类型,提供输出操作. . cin,一个istream对象,从标准输入读取数据. . cout,一个ostre ...
- 高级UNIX环境编程5 标准IO库
标准IO库都围绕流进进行的 <stdio.h><wchar.h> memccpy 一般用汇编写的 ftell/fseek/ftello/fseeko/fgetpos/fsetp ...
- c++ primer 学习杂记3【标准IO库】
第8章 标准IO库 发现书中一个错误,中文版p248 流状态的查询和控制,举了一个代码例子: int ival; // read cin and test only for EOF; loop is ...
- C/C++基础----标准库几个工具库tuple,bitset,正则表达式,随机数,IO库
tuple tuple可以有任意多个成员 默认初始化,值初始化 构造函数是explicit,必须直接初始化 make_tuple(v1,v2,-,vn) get<i> (t) 返回第i个数 ...
随机推荐
- pyplot
错误: 执行 import matplotlib.pyplot 报错 ImportError: No module named _tkinter, please install the python- ...
- (转)Linux curl命令详解
命令:curl在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具. ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- DedeCMS织梦自定义图片字段调用出现{dede:img ..}
做站过程中碰到这样一个问题,找到解决办法收藏分享:为什么在首页用自定义列表调用出来的图片字段不是正确的图片地址,而是类似于: {dede:img text='' width='270' height= ...
- [Java][Liferay] 解决在Linux系统中liferay-ext项目无法卸载的问题
今天遇到liferay-ext无法卸载,log中显示卸载了,但是在App Manager中依然可以看到安装过的ext,其中一个原因是webapps下面的**-ext文件夹的权限只有root才能修改,将 ...
- 设置 text-align: center;line-height:height 居中无效
1.设置文字水平居中 内联元素(行内元素)使用: text-align: center: 使用后文字仍然没有居中 解决方法:设置width:100%: 块元素使用: margin: 0 auto; 2 ...
- 算法练习-Palindrome Number
判断回文整数 来源 https://leetcode.com/problems/palindrome-number/ 要求 判断一个整数是不是回文数,尽量减少内存暂用. 思路 可能的情况: 负数的应当 ...
- sql分组数据去重
#分组获得每个机柜里服务器占用的机架总数,如552807e6-b428-4184-b219-ae368c68ddb3占用4个 mysql> select cabinet_uuid, count( ...
- Oracle11g 卸载教程图解
1:停掉所有Oracle相关的服务 1.1打开服务方式如下: 1.1.1:右击“计算机”–>管理–>服务和应用程序–>服务 1.1.2:开始–>输入“服务”后点击搜索–> ...
- 翻译-ExcelDNA开发文档-首页
转载自个人主页 前言 ExcelDNA是一名国际友人开发的开源框架,文档全是英文文档,当时看的时候非常吃力,现在将英文文档翻译过来,为的是让自己加深印象以及自己以后看的时候能不用这么吃力. 介绍 Ex ...