1. 标准库支持wchar_t类型的IO类,在每个类前加“w”前缀即可。文件流的头文件为fstream。string流的头文件为sstream。
2. IO对象不能复制和赋值,因为只有支持复制的元素类型才能存储在vector容器和其他容器中,故流对象不能存储在vector和其他容器中。流对象也不能作为函数形参和返回类型。如果要传递和返回IO对象,只能返回指向对象的引用或者指针。
3. IO标准库管理一系列的条件状态,用来标记给定的IO对象是否处于可用状态。
4. 流必须处于无错误状态,才可以用于输入或者输出。检查流是否可用的最简单方法是检查它的真值:
if(cin)
while(cin>>word)
IO标准库的条件状态:
strm::iostate 由各个iostream 类定义,用于定义条件状态
strm::badbit strm::iostate类型的值,用于指出被破坏的流
strm::failbit strm::iostate类型的值,用于指出失败的IO操作
strm::eofbit strm::iostate类型的值,用于指出流已经到达文件的结束符
s.eof() 如果设置了流s的eofbit值,该函数返回true
s.bad() 如果设置了流s的badbit值,该函数返回true
s.fail() 如果设置了流s的failbit值,该函数返回true
s.good() 如果流s处于有效状态,该函数返回true
s.clear() 清空流s的所有状态,并设为true
s.clear(flag) 给流s的某个条件状态位设置为true。flag,类型是strm::iostate
s.setstate(flag) 给流s的添加指定条件。flag,类型是strm::iostate
s.rdstate() 返回流s的当前条件,返回值类型是strm::iostate
注意:s.setstate(flag)是给流s的添加指定条件,会保留已存在的状态。
当输入文件结束符(eof),cin会进入错误状态。
文件流的状态必须及时清除.以ifstream in为例,当in.close()后,in中的失败状态不被清空,因此必须显示地调用函数,清空错误状态。
5. 输出缓冲区的管理
用操纵符显示的地刷新,如endl,flush,ends.
每次输出操作执行完成后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区
将输出流与输入流关联(tie)起来,此时,在读输入流时将刷新其关联的输出缓冲区。
tie函数可用istream和ostream对象调用,使用一个指向ostream对象的指针形参调用tie函数时,将实参流绑定在调用该函数的对象上。如果一个流调用tie函数将其本身绑在传递给tie函数的ostream的实参对象上,该流上的任何IO操作都会刷新实参所关联的缓冲器。
如果将0做实参,则取消绑定。
6. 如果把fstream对象与另一个文件关联,则必须先关闭现在的文件,然后打开另一个文件。文件名必须是C风格的字符串。
7. 文件打开的模式.
in 打开文件做读操作.
out 打开文件做写操作.
app 在每次写之前找到文件尾.
ate 打开文件后立即将文件定位到文件尾.
trunc 打开文件时清空已经存在的文件流.
binary 以二进制模式进行IO操作.
out,trunc和app模式只能用于指定与ofstream或fstream对象关联的文件;in模式只能用与指定ifstream或fstream对象关联的文件.
所有的文件都可以用ate和binary模式. ate只在打开时有效。
对于用ofstream打开的文件,要保存文件中已经存在的数据,唯一的方法是显式的指定以app的模式打开.
8. 打开文件模式的有效组合.
out 打开文件做写操作,删除文件中已有的数据.
out | app 打开文件做添加操作,在结尾添加.
out | trunc 与out相同.
in 打开文件做读操作.
in | out 打开文件做读写操作,并定位于文件开始处,不清空。 fstream默认的打开方式。
in | out | trunc 打开文件做读写操作,删除文件中已有的数据.
上述所有打开模式组合还可以添加ate模式,对这些模式添加ate只会改变文件打开时的初始定位,定位于文件结尾处。如果指定trunc模式,则文件总会清空。
ofstream outfile("file1");
ofstream outfile2("file1", ofstream::out | ofstream::trunc);
ofstream appfile("file2", fostream::app);
模式是文件的属性而不是流的属性。
9. 字符串流的特定操作,定义在sstream头文件中.每个stringstream对象都有一个string类型的对象成员。这些类还定义了名为str的成员,用来读取或设置stringstream对象所操作的string对象成员。
stringstream strm; 创建自由的stringstream对象.
stringstream strm(s); 创建存储s的副本的stringstream对象.s是string对象.
strm.str(); 返回strm中string类型的对象.
strm.str(s); 将string类型的s复制给strm,返回void.
10. stringstream的使用:
可以用来处理每行的每个单词。
string line,word;
while(getline(cin,line)){ // 使用getline获取整行内容.
istringstream stream(line); // 将line绑定到一个istringstream对象上.
while(stream>>word){ // 将line中的每个字输入到word中. >>遇到空白符将结束输入。
// ...
}
}
在需要多种数据类型之间实现数据类型之间实现自动格式化时使用该类类型。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
int val1 = 512, val2 = 1024;
ostringstream format_str;
string dump; // 为了屏蔽字符串中无用的标号.
// 将数字转换为对应的打印字符串.
format_str << "val1: " << val1 << "\n" << "val2: " << val2 << "\n";
//这时format_message的关联string对象的内容是如下字符 val1: 512\nval2: 1024\n
// 转化为istringstream对象,读出字符串中的数据.
istringstream input_str(format_str.str());
input_str >> dump >> val1 >> dump >> val2;
cout<< val1 << " " << val2 << endl; //输出512 1024
getchar();
return 0;
}
一般情况下,使用输入操作符读string对象时,空白符将会忽略。于是,在读与format_message关联的string时,忽略其中的换行符。
分享到:
相关推荐
C++标准IO库,通过C++标准输入输出流对控制窗口,磁盘文件字符串流进行控制。内容也包含条件状态,文件模式等内容。
C++标准IO 2 1.面向对象的标准库 2 2.流的状态 4 1.流状态 4 2.流状态的使用 4 3.缓存的管理 5 1.刷新输出缓冲区 5 2.输入和输出绑定 6 4.文件IO 6 1.类与对象 6 2.函数调用 7 1.文件模式 7 2.open函数 8 3.close...
利用 C++标准 IO 库的 ifstream 类 型定义对象并绑定STL文件;再用标准库string类型中的getline逐行读取绑定的STL文件;最后, 应用 OpenGL 中绘制三角面片编程技术实现对 STL 文件格式的直观显示。通过试验验证了...
C++程序设计与数据结构基础:第8章 C++ IO流标准库.ppt
C标准库源代码\IO.H C标准库源代码\IOINIT.C C标准库源代码\IOMANIP C 标准库源代码\IOMANIP.CPP C标准库源代码\IOMANIP.H C标准库源代码\IOS C标准库源代码\IOS.CPP C标准库源代码\IOS.H C标准库源代码\IOSFWD C...
标准c库,c++模板,c++ IO,c++ string,全部c函数,和全部c++函数
包里面有测试代码,包含了文件流和标准IO流的输入与输出。 不足: 没有实现‘\uXXXX’的解析与转义 输出是不换行的,如果需要请行写一个格式化输出 效率没有测试过,但我觉得它应该是易用的。
静态库的编写 动态库的编写 接口的注意事项
第八章 标准IO库 37 第九章 顺序容器 43 第十章 关联容器 60 第十一章 泛型算法 75 第十二章 类和数据抽象 86 第十三章 复制控制 94 第十四章 重载操作符与转换 102 第十五章 面向对象编程 116 第十六章 部分选做...
sk-async (WIP)基于Coro的无异常异步I / O库。仅适用于Windows。要求: MSVC 19.28(VS 16.9)或更高版本。不支持Clang,因为clang-cl不支持标准协程(尚未)。例子:
LibSourcey :用于实时的视频流和高性能网络应用程序的C++11 evented IO。 LibU : C语言写的多平台工具库。 Loki :C++库的设计,包括常见的设计模式和习语的实现。 MiLi :只含头文件的小型C++库。 openFrameworks...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
C/C++ 语言库函数参考手册,方便查找与使用。
第8章 标准IO库 8.1 面向对象的标准库 8.2 条件状态 8.3 输出缓冲区的管理 8.4 文件的输入和输出 8.4.1 文件流对象的使用 8.4.2 文件模式 8.4.3 一个打开并检查输入文件的程序 8.5 字符串流
不使用任何非C++标准库,支持字体大小、颜色,单元格合并、背景色、边框等设置。 generate_excel.vcproj为在vs2005下的工程文件,如果需要在vc6或Linux等其他编译环境下使用只需新建工程将.h文件和.cpp文件导入即可...
使用多路复用/多线程/异步网络IO模式开发,并发性能优越,支持海量客户端连接。 代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。 支持linux、macos、ios、android、windows全平台。 支持画面秒开、极...
第8章 标准IO库 8.1 面向对象的标准库 8.2 条件状态 8.3 输出缓冲区的管理 8.4 文件的输入和输出 8.5 字符串流 小结 术语 第二部分 容器和算法 第9章 顺序容器 第10章 关联容器 ...
第8章 标准IO库 8.1 面向对象的标准库 8.2 条件状态 8.3 输出缓冲区的管理 8.4 文件的输入和输出 8.5 字符串流 小结 术语 第二部分 容器和算法 第9章 顺序容器 第10章 关联容器 ...
第8章 标准IO库 243 8.1 面向对象的标准库 244 8.2 条件状态 247 8.3 输出缓冲区的管理 249 8.4 文件的输入和输出 251 8.4.1 文件流对象的使用 251 8.4.2 文件模式 254 8.4.3 一个打开并检查输入文件的 程序 256 ...
C++标准库是一套基于C++语言之上的函数和类库,其早期代码都定义在std命名空间中,大部分类都是用template模板实现的,它主要由IO流,string字符串类,和STL组成。标准库中的实现代码除了分布在没有后缀的头文件...