我讀C++ Primer - IO庫

C++ 語言不直接處理輸入輸出,而是通過一組定義在標準庫的類型處理IO。其主要包括 iostream(讀寫流的基本類型)  fstream(讀寫文件的類型)  sstream(讀寫內存string對象的類型)


1  IO類    頭文件<iostream>

不能拷貝或對IO對象賦值。常用引用方式傳遞和返回流。

IO操作可能發生錯誤,可以使用一些函數以及標誌來訪問和操縱流的條件狀態。

確定一個流對象的狀態的最簡單的方式是將他當做一個條件來使用,如:

while (cin>>word)
    ....
每個輸出流都管理一個緩衝區,用來保存程序讀寫的數據。有了緩衝機制,操作系統就可以將程序的多個輸出操作組合成單一的系統級寫操作,因爲設備的寫操作很耗時,因此此舉可以帶來很大的性能提升。

導致緩衝刷新的原因:程序正常結束;緩衝區滿了;手動操作,如endl ;用操縱符unitbuf設置流的內部狀態,清空緩衝區;一個輸出流被關聯到另一個流。

刷新輸出緩衝區:

cout<<"hi"<<endl;  // 輸出hi + \n
cout<<"hi"<<flush; // 輸出hi 
cout<<"hi"<<ends;  // 輸出hi + ‘ ’
cout<<unitbuf;     // 所有輸出操作之後都立即刷新緩衝區
...
cout<<nounitbuf;   // 回到正常的緩衝方式
另外,因爲標準庫將cout 與cin 關聯在一起,所以輸入任何值同樣導致輸出緩衝區刷新,要綁定流,用tie

如果程序崩潰,輸出緩衝區不會被刷新。


2  文件輸入輸出    頭文件<fstream>

當我們想要讀寫一個文件時,可以定義一個文件流對象,並將對象與文件關聯起來,如:

ifstream in(ifile);
ofstream out;
out.open(ifile + ".copy");                                                                                                                                if (out)                                                                                                                                                      ...
每個流都有一個文件模式,指出如何使用文件:

in     讀

out   寫
app  追加

ate   打開文件後即定位到結尾

trunc  截斷文件

binary  二進制讀寫

默認情況,ifstream用in打開,ofstream用out打開,fstream用in和out打開


3  string流    頭文件<sstream>

當我們的某些工作是對整行文本進行處理,而其他一些工作是處理行內的單個單詞時,通常可以使用istringstream,如:

string line, word;
while (getline(cin,line))   // 讀取一行存入string對象line
{
    istringstream is(line); // 將string對象轉換成is流對象
    while (is>>word)        // 每次讀取一個string對象word
          ...
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章