第9章iostream库
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
istringstream类的构造函数为:
istringstream(const char *str); istringstream( );
例如: istringstream st(“12 5.6 hello”);
int a; double b;
st>>a>>b;
cout<<a<<endl<<b;
//12
if(cin!=0)
//cin为false表示读操作失败或遇到文件尾
ios基类定义的状态字有:
ios::badbit 操作无效
ios::goodbit 正常状态 ios::failbit 上次I/O操作失败
ios::eofbit 到达文件尾
可以通过以下成员函数访问当前状态值: int eof( ); 到达文件尾,返回true,否则false
10.2 容器
in>>obj.b; return in;}
int main( )
{data d1(3,8.9); cout<<d1;
return 0;}
第一个参数是ostream 或istream对象的引用,所以只能定义为友元函数。
9.3 文件输入和输出
9.3.1 ofstream流类
ofstream流类对象完成文件的输出,ofstream流类对象的构造函数有: 1、ofstream(char * s,int mode=ios::base_out,int attr=filebuf::openprot); s指向要打开的文件名字符串; mode为打开模式,缺省实参值为输出模式(ios::base_out),还可以为附加模式 (ios::base_app)。若打开的文件不存在,则创建新文件。如果在输出模式下打 开已存在的文件,文件中的数据将被覆盖,若希望保留文件原来的数据,应以 附加模式打开,新数据将添加至文件尾部; 文件打开模式还有: ios::ate 打开文件以便输出,位置指针移到文件末尾(通常用于添加数据); ios::in 打开文件以便输入; ios::trunc 删除文件原来的数据(是ios::out的默认操作) ios::nocreate 如果文件不存在,则文件打开失败 ios::noreplace 如果文件存在,则文件打开失败 ios::binary 以二进制方式打开文件
ios_base::beg 从文件开始处偏移
ios_base::cur 从文件当前位置处偏移 ios_base::end从文件结尾处偏移
4、istream& seekg(post_type c_p);
位置指针移动到第c_p字节 istream& seekg(post_type o_p,ios_base::seekdir dir);
第9章 iostream库
ios
输入流类
istream
ostream
输出流类
iostream
iftream 标准流类对象: 1、cin 标准输入 2、cout 标准输出
fstream
oftream
3、cerr 标准错误,产生错误消息,输出到终端
9.1 输出输出流
9.1.1 输入输出流类对象
cout是ostream流类的对象,它与标准输出设备(通常指显示设备)连在一起。 <<运算符实现数据流输出,ostream流类对每个基本类型都重载了<<运算符, 例如:ostream& operator<<(int source); ostream& operator<<(const char* source); cout<<“hello”<<“\n”; //表达式的值为cout对象自身,可以实现连续输出
位置指针偏移o_p字节
5、 post_type tellp( ) (用于ofstream)返回位置指针当前位置
post_type tellg( ) (用于ifstream)返回位置指针当前位置
9.3.4 string流类
string流类直接对内存进行操作。ostringstream类用于向一个string对象插入 字符; istringstream类用于从一个string对象读取字符; stringstream类用于 向一个string对象读写字符。 必须包含<sstream>
attr为文件保护方式 ,缺省实参值为filebuf::openprot(兼容共享),还可以是 filebuf::sh_none(不共享), filebuf::sh_read(读共享) ,filebuf::sh_write(写共享)。 文件与类对象相连接,所有对文件的操作都转换为对对象的操作。 读写文件之前,应测试打开是否成功。 例如:ofstream outfile(“text.dat”); if(!outfile) {ceer<<”cannot open “data.txt” for output\n”;
关闭文件,但是不析构对象。主要是处于安全的考虑,否则一般不用显式 关闭文件,在类对象析构时会自动关闭与类对象连接的文件。 3、ostream& seekp(post_type c_p); 位置指针移动到第c_p字节 ostream& seekp(post_type o_p,ios_base::seekdir dir); 位置指针偏移o_p字节 dir的值为以下之一:
exit(-1);}
char ch; while(cin.get( )) outfile.put(ch);
ofstream派生自ostream类,所有ostream类的成员函数都可用于ofstream类对 象。
2、 ofstream( ) ; 生成ofstream对象而不打开特定文件,以后再将文件与对象相连接。 例如:ofstream outFile2;
9.1.2.2 输出函数
1、 ostream& put(char ch) ;
将字符ch输出到输出流中。 2、ostream& write(const char *s,streamsize length);
输出长度为length的字符序列到输出流,包括‘\0’。
9.2 重载<<、>>运算符
希望类类型支持<<、>>运算符,必须对这两个运算符进行重载。 例如:class data{ int a; float b; public: data(int x,float y) {a=x;b=y;} friend ostream& operator<<(ostream& out,const data& obj); friend istream& operator>>(istream& in, data& obj);};
ise
int fail(); 流操作不成功,返回true,否则false int good();状态正常,返回true,否则false
9.3.3.2 成员函数
1、void open(char * s,int mode); 为没有打开文件的流类对象打开文件,用于:用不打开文件方式构造 的流类对象;流类对象的文件已经用close()成员函数关闭。 2、void close( );
//5.6,根据数据类型提取
ostringstream类的构造函数为:
ostringstream(char *str);
ostringstream( ); 例如: ostringstream buf;
int a=45;
double b=9.67; buf<<a<<b;
string text=buf.str( );//成员函数str( )返回与ostringstream类相关联的
仿函数functors 重载了operator( )的类或类模板
配接器adapters 改变containers、 functors、 iterators的接口的组件 配置器allocators 内存配置类器,负责内存空间分配与管理的类模板
容器通过配置器获得内存空间,算法通过迭代器访问容器的内容,仿函数 协助算法完成更多数据处理。
9.1.2 输入输出成员函数
9.1.2.1 输入函数
1、 istream& get(char& ch) ; 从输入流中提取一个字符,包括空白字符,赋值给ch。当遇到文件结束符时, 返回0。 2、int get( ); 从输入流中提取一个字符,返回该字符值。可以用来测试返回值是否为文件 尾标志,例如:
以下情况下,字符读取结束,并为读入字符串末尾自动加上‘\0’:
读入size-1个字符 •
遇到文件结束符 • 遇到delimiter字符 •
例如:int max_line=1024;
char line[max_line]; while(cin.get(line,max_line))
//…
4、istream& getline(char *s,streamsize size,char delimiter=‘\n’); 等同于get,但是遇到delimiter字符,将缓冲区的当前指针移到delimiter字符 后,下次读取时从delimiter字符的下一字符开始。 5、istream& read(char *addr,streamsize size); 从输入流中读取size个字节,存放于从addr开始的内存中,不在字节末尾加 上‘\0’。
9.3.2 ifstream流类
ifstream流类对象完成文件的输出,ifstream流类对象的构造函数为:
ofstream(char * s,int mode=ios::base_in,int attr=filebuf::openport); s指向要打开的文件名;
mode为打开模式,缺省实参值为输入模式(ios::base_in)。
// string对象 cout<<text; //输出459.67
字符串流类对象支持由多种数据类型构成的复合string的自动格式化。
第10章 抽象容器类
10.1 STL标准模板库概述
STL六大组件
容器containers 各种数据结构,用来存放数据
算法algorithms 排序、查找等各种常用算法,可以用于任意容器之上 迭代器iterators 泛型指针,可以遍历容器的元素
cin是istream流类对象,与标准输入设备(通常指键盘)连在一起。
>>运算符实现数据流输入,ostream流类对每个基本类型都重载了>>运算符, 例如:istream& operator>>(int &source); istream& operator>>(char* source); int a,b; cin>>a>>b; //表达式的值为cin对象自身,可以实现连续输入。 流读取运算符通常会跳过输人流中的空格、tab键、换行符等空白字符 。当 遇到输入流中的文件结束符时,流读取运算符返回0(false);否则,流读取运算 符返回对调用该运算符的对象的引用。
ostream& operator<<(ostream& out,const data& obj)
{out<<“a=”<<obj.a<<“,b=”<<obj.b<<endl;
return out;} istream& operator>>(istream& in, data& obj)
{in>>obj.a;
int ch;
while((ch=cin.get( ))!=EOF) cout.put(ch); 3、istream& get(char *s,streamsize size,char delimiter=‘\n’); s指向用来存放读取到的字符的内存地址; size是从istream中读入的最大字符个数; delimiter是读取结束标志,但是该标志字符本身不会被读入,而是留在 istream中作为下一个读取字符。
ifstream类也可以生成对象而不打开特定文件,然后再将对象与文件相连接。 fstream类对象可以完成文件的输入输出,例如:
fstream iofile(“text.dat”,ios::in|ios::out);
按位或运算符(|)用来连接一种以上的打开模式。
9.3.3 文件操作成员函数
9.3.3.1 流类状态 对于流类对象,可以使用返回类行为void *的转换函数。当流类对象出现在关 系运算表达式中时,这个函数自动调用,以判断其是否处于正常状态。如