③读写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;