C++中 隨機訪問(random access) 流(stream) 詳解

來源:互聯網
上載者:User

隨機訪問流, 使用mark(標記)標註流的位置, 包含兩種方法tell和seek;

tell, 是返迴流mark的位置, 包含g和p兩種版本.g表示get, 指輸入資料流; p表示put, 指輸出資料流;

seek, 是跳至流mark所指的位置, 也包含g和p兩種版本;seek可以指定位置, 也可以指定位移(offset);

代碼如下:

/*  * cppprimer.cpp  *  *  Created on: 2013.11.28  *      Author: Caroline  */      /*eclipse cdt, gcc 4.8.1*/      #include <iostream>  #include <fstream>  #include <cstdlib>        using namespace std;        int main()  {      std::fstream inOut("copyOut", std::fstream::ate/*末尾*/ | std::fstream::in | std::fstream::out);      if(!inOut) {          std::cerr << "Unable to open file! " << std::endl;          return EXIT_FAILURE;      }      std::fstream::pos_type end_mark = inOut.tellg();      inOut.seekg(0, std::fstream::beg); //重定位在起點      std::size_t cnt(0);      std::string line;      while (inOut && inOut.tellg() != end_mark &&              getline(inOut, line))      {          cnt += line.size() + 1;          std::fstream::pos_type mark = inOut.tellg(); //記住當前位置          inOut.seekp(0, std::fstream::end); //跳至末尾          inOut << cnt;          if (mark != end_mark) inOut << " "; //除了最後一行, 均寫入空格          inOut.seekg(mark); //回到記錄的地點      }      inOut.seekp(0, std::fstream::end);      inOut << "\n";      return 0;  }

更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

輸出(文本):

Caroline  Wendy  Spike  Winny  9 12 16 21

作者:csdn部落格 Spike_King

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.