c++中I/o库的学习

来源:互联网 发布:mac book air驱动下载 编辑:程序博客网 时间:2024/04/29 05:41

个人觉得i/o库挺难的,其中有很多要点要求掌握

1.io类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,sstream所定义的类型用于读写存储在内存中的string对象

2.标准库类型不允许做赋值和复制操作如:

(1)ofstream out1,out2;

out1=out2;//error是不支持赋值的

ofstream print(ofstream);

out2=print(out2);//error是不支持复制的

因为流对象有这样的特性,因此不能存储在vector类似的容器中

(2)形参和返回类型不能为流类型,真要只能传递和返回对象的指针或者引用:

oftream &print(ofstream&);//一般传递非const的引用,因为io对象的读写会改变它的状态,必须为非const的

while(print(out2));

3.io标准库管理一系列条件状态:badbit,failbit,eofbit,这些状态都是strm:iostate类型的,有很多函数可以测试和操作这些状态:s.eof(),s.fail(),s.bad(),s.good(),s.clear(),s.clear(flag),s.setstate(flag),s.rdstate()

4.输出缓冲区的管理,有三种刷新的方式

(1)用endl,flush,ends,endl刷新的同时在缓冲区中加入换行符,flush刷新不在缓冲区中加入任何的符号,ends不常用,在缓冲区中插入null符号

(2)unitbuf操作符将会刷新所有的输出如:

cout<<unitbuf<<"first"<<"second"<<nounitbuf;等价于

cout<<"first"<<flush<<"second"<<flush;

(3) 将输入和输出绑定在一起如:cin>>i;将导致cout关联的缓冲区被刷新

5 .文件的输入和输出只有一下几点

(1)对象关联文件时使用cstring而不是string此时需要使用c_str()函数将string转变成c_string

(2)当文件和新的文件相关联是必须先关闭现在的文件,然后再打开新的文件

(3)关闭流并不能改变流对象的内部状态,如果打算重用已存在的流对象就必须关闭和清空文件流,形式如下:

in.close();

in.clear();

(4)只使用out模式将会清空文件中的内容,但同时指定in和out不会清空

6.字符串流

字符串流有两个重要的应用其一形式如下:

 string line,word;
 while(getline(cin,line)){
  istringstream stream(line);//将一个istringstream对象与所读取的行绑定起来
  while(stream>>word){//普通的string操作就可以读出string
   cout<<word<<endl;
  }
 }

其二如下:

stringstream提供转换和格式化:能够将算术类型装换成字符类型,相反也可以如:

int val1=12,val2=3;

ostringstream format_message;

format_message<<"val1:"<<val1<<"\n"<<"val2:"<<val2<<"\n";//这样就将int类型转化成string类型了

对应的操作如下:

istringstream input_istring(for_message.str());//返回其中的string值

string dump;

in_put>>dump>>val1>>dump>>val2;//其中的空白字符将会被忽略,从其中读取就会将string类型转换成int型

cout<<val1<<" "<<val2<<endl;