程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中 隨機訪問(random access) 流(stream) 詳解

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

編輯:關於C++

隨機訪問流, 使用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;  
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved