C++_IO库详解

       标准库的IO类型主要有:iostream(定义了用于读写流的基本类型),fstream(定义了读写命名文件的类型),sstream(定义了读写内存string对象的类型),并且为了支持宽字符的语言,标准库还定义了一组类型和对象来操纵wchar_t类型的数据。


注意:
①IO对象无拷贝或者赋值
②进行IO操作的函数常常以引用方式传递和返回流

③读写IO对象会改变其自身的状态,传递和返回的引用不能用const




第一部分:条件状态
strm::iostat:(strm是一种IO类型)是一种机器相关的类型提供了条件状态的完整性
strm::badbit:用来指出流已经崩溃
strm::failbit用来指出一个IO操作失败了
strm::eofbit用来指出流到达了文件结束
strm::goodbit用来指出流未出错
s.eof():若流eofbit置位,则返回true,s.fail(),s.good(),s.bad()同理
s.clear():将流的所有状态位复位
s.clear(flags):根据给定的标志为将流s中对应条件状态位复位flag位iostate,同s.setstate(flags)
s.rdstate():返回流s的当前状态


第二部分:管理输出缓冲
1、刷新输出缓冲区
   每一个输出流都管理着一个缓冲区,用来保存程序读写的数据。
   刷新缓冲区主要有四种方式:

   ①endl:完成换行并刷新缓冲区
   ②flush:刷新缓冲区但不添加任何额外字符
   ③ends:向缓冲区插入一个空白字符,然后刷新缓冲区
   ④unitbuf:告诉流在接下来的每次操作之后都有一次flush操作(nounitbuf)
// 以引用方式传递和返回流 
//读写IO对象会改变其自身的状态,传递和返回的引用不能用const
ostream& operator<<(ostream& out, const Test& src)
{
    for (size_t i = 0;i < strlen(src._ptr);++i)
    {
        out<
   
   
    
    <
    
    
   
   


2、关联输入输出流
   标准库cin和cout关键在一起,任何试图从输入流读数据的操作都会先刷新输出流。
   关联函数:s.tie()和s.tie(&flags)


第二部分:文件输入输出

   文件操作特有的操作主要有:fstrm.open(s)、fstrm.close()、fstrm.is_open();并且fstream对象会自动构造和析构。

使用代码如下: 

   ifstream in(file1);
   ofstream out(file2);//隐含的设置为输出和截断
   if (out)
   {
       cerr<< "could not open"<<endl;
   }


第三部分:string流
    istringstream从string中读取数据,ostringstream向string写入数据,而头文件stringstream既可以从string读数据也可以向string中写数据。


使用istringstream:
string line;
string word;
//保存来自输入的所有数据
vector
    
    
     
      people;
//逐行从输入读取数据,直到cin遇到文件尾
while (getline(cin, line))
{
    //创建一个此记录数据的对象
    Person info;
    //将此记录绑定到刚读入的行
    istringstream record(line);
    record >> info.name;
    while (record >> word)
    {
        info.phones.push_back(word);
    }
    //将此记录追加到people的末尾
    people.push_back(info);
}
    
    

使用ostringstream:

ostringstream oss(ios_base::ate);
oss.str("abc");
oss << "def";
cout << oss.str() << endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博士僧小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值