博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ Primer 读书笔记 Chapter 8 标准I/O库

Posted on 2010-08-18 22:45  KurtWang  阅读(325)  评论(0编辑  收藏  举报

无标题

  1. 所有的流都是由char类型组成的流。
    1. 在流前加上w,即变成支持宽字符的流,如wstream,wfstream。
  2. IO对象不可复制或赋值
    1. 不可放在vector等容器中,因为容器中元素必须支持复制
    2. 流不能作为形参或返回类型
  3. IO标准库状态:strm::iostate(值为badbit, failbit,eofbit)
    1. s.eof(), s.fail(), s.bad(), s.good() 返回bool
    2. s.clear() 将s的所有状态都设为有效状态
    3. s.clear(flag) 将s的flag状态设为有效 flag为strm::iostate
    4. s.setstate(flag) 给s添加指定条件
    5. s.rdstate() 返回s的当前条件
  4. 输出缓冲区管理
    1. cout<<flush 清空缓冲区
    2. cout<<ends 插入空字符,清空缓冲区
    3. cout<<endl 插入新行,清空缓冲区
  5. 文件流
    1. ifstream 读文件流 ofstream 写文件流 fstream 读写文件流
    2. 文件流初始化参数为char * 
    3. 用一个流s打开多个文件时,每次不止要s.close(),而且要s.clear()
    4. ifstream input;
      vector<string>::const_iterator it = files.begin();
      // for each file in the vector
      while (it != files.end()) {
      input.open(it->c_str()); // open the file
      // if the file is ok, read and "process" the input
      if (!input)
      break; // error: bail out!
      while(input >> s) // do the work on this file
      process(s);
      input.close(); // close file when we're done with it
      input.clear(); // reset state to ok
      ++it; // increment iterator to get next file
      }
  6. 文件模式
    1. in 打开文件读
    2. out 打开文件写
    3. app 在每次写之前到文件尾
    4. ate 打开文件后即定位在文件尾
    5. trunc 打开文件时清空已存在的文件流
    6. binary 二进制方式
    7. 有效组合:
      1. out :打开文件写,删除已有数据
      2. out | app : 打开文件写,在文件尾追加
      3. out | trunc : 与out模式相同
      4. in : 打开文件读
      5. in | out : 打开文件读写,定位于文件开头处
      6. in | out | trunc : 打开文件做读写,删除已有数据
  7. 字符串流
    1. istringstream 读string; ostringstream 写string; stringstream 读写string
    2. 操作
      1. stringstream strm 空对象
      2. stringstream strm(s) s的副本,s为string
      3. strm.str() 返回string对象
      4. strm.str(s) 将s复制给strm
    3. 示例程序

 

  1.  
      string line, word; // will hold a line and word from input, respectively
      while (getline(cin, line)) { // read a line from the input into line
      // do per-line processing
      istringstream stream(line); // bind to stream to the line we read
      while (stream >> word){ // read a word from line
      // do per-word processing
      }
      }