c primer(第五版)筆記 第八章 io

2021-06-24 12:00:41 字數 3787 閱讀 6484

// iostream 標頭檔案

// istream, wistream 從流讀取資料

// ostream, wostream 向流寫入資料

// iostream, wiostream 讀寫流

// fstream 標頭檔案

// ifstream, wifstream 從檔案讀取資料

// ofstream, wofstream 向檔案寫入資料

// fstream, wfstream 讀寫檔案

// sstream 標頭檔案

// istringstream, wistringstream 從string 讀取資料

// ostringstream, wostringstream 向string 寫入資料

// stringstream, wstringstream 讀寫string

//io 物件無法拷貝或賦值,所以不能用於形參或返回型別,可以使用引用傳遞和返回,會改變其狀態,也不能是 const

//io 條件狀態(condition state)

// strm 表示上述所有型別

// strm::iostate iostate 機器相關型別,提供表達條件狀態的完整功能

// strm::badbit 表示流已崩潰

// strm::failbit 表示 io 操作失敗

// strm::eofbit 表示流到達了檔案結束

// strm::goodbit 表示流未處於錯誤狀態,此值保證為 0

// s.eof() 若流 s 的 eofbit 置位,則返回 true

// s.fail() 若流 s 的 failbit 或 badbit 置位,則返回 true

// s.bad() 若流 s 的 badbit 置位,則返回 true

// s.good() 若流 s 處於有效狀態,則返回 true

// s.clear() 將流 s 的所有條件狀態位復位,將流的狀態設定為有效,返回 void

// s.clear(flags) 根據給定的 flags 位,將流 s 的對應條件狀態位復位,返回 void,flags 的型別為 strm::iostate

// s.setstate(flags) 根據給定的 flags 位,將流 s 的對應條件狀態位復位,返回 void,flags 的型別為 strm::iostate

// s.rdstate() 返回流 s 的當前條件狀態,型別為 strm::iostate

// 最簡單的流狀態判斷,如果操作成功,流保持有效狀態,則條件為真

// while (cin >> val)

// 上述條件僅能判斷流是否有效,並不知道流的狀態,eofbit failbit badbit 都會使上述條件失敗

// 如果 badbit 被置位,表示系統級錯誤,流不可再用

// 如果 failbit 被置位,表示發生的錯誤可以恢復,流可以繼續使用

// 如果到達檔案尾,eofbit 和 failbit 都會置位,goodbit 為0,表示流沒發生錯誤

// 方法 good 在所有錯誤位均未置位時,返回 true,確定流是否正確的有效方法之一,另一種方法是 !fail()

// 方法 fail bad eof 在對應錯誤位置位時,返回 true,如果 badbit 被置位,fail 也會返回 true

// 緩衝重新整理的原因:

// 1>程式正常結束,作為 main 函式中 return 操作的一部分

// 2>緩衝區滿時,需要重新整理緩衝區,以便後續資料的寫入

// 3>使用 endl 顯式重新整理

// 4>在每個輸出操作後,用操作符 unitbuf 設定流的內部狀態,預設對 cerr 設定 unitbuf,所以內容是立即重新整理的

// 5>乙個輸出流被關聯到另乙個流,讀寫被關聯流時,關聯的流的緩衝會重新整理,預設 cin 和 cerr 關聯到 cout,所以讀寫 cin cerr,會重新整理 cout 的緩衝

#include#include#include#include#includeusing std::istream;

using std::ostream;

using std::cin;

using std::cout;

using std::endl;

using std::ends;

using std::flush;

using std::unitbuf;

using std::nounitbuf;

using std::string;

using std::vector;

using std::ifstream;

using std::istringstream;

istream &io_test(istream &is);

void io_test_state(istream &is);

void read();

void off();

void read_from_file();

int main()

istream &io_test(istream &is)

is.clear();

return is;

}void io_test_state(istream &cin)

inline void read()

inline void off()

// 檔案輸入輸出

// fstream 是 fstream 標頭檔案中乙個型別

// fstream fstrm; //建立乙個未繫結的檔案流

// fstream fstrm(s); //建立乙個未繫結的檔案流,並開啟名為 s 的檔案,s 可以是 string 也可以是 char *

// fstream fstrm(s,mode); //以 mode 的模式執行上面的操作

// fstrm.open(s); //返回 void,開啟名為 s 的檔案,並與 fstrm 關聯

// fstrm.close(); //返回 void,關閉 fstrm 關聯的檔案

// fstrm.is_open(); //返回 bool,指明與 fstrm 關聯的檔案是否成功開啟並尚未關閉

//檔案模式(file mode)

// in 以讀方式開啟

// out 以讀方式開啟

// ate 開啟檔案後,立即定位到檔案尾

// trunc 截斷檔案

// binary 以二進位制方式 io

// 組合規則

// 只有 ifstream 或 fstream 物件才可以設定 in 模式

// 只有 ofstream 或 fstream 物件才可以設定 out 模式

// 只有當 out 也被設定時,才可以設定 trunc

// ate 和 binary 可以用在任何型別的檔案流物件,可以和其他任何模式組合

void read_from_file()

cout << "....end...." << endl;

// for(auto &s:vs) //輸出顯式

// cout << s << endl;

}//string 流

// sstream 是 sstream 標頭檔案中的型別

// sstream strm; 未繫結的 stringstream 物件

// sstream strm(s); 儲存 string s 的乙個拷貝

// strm.str(); 返回 strm 儲存的拷貝

// strm.str(s); 拷貝 s 到 strm 中,返回 void

C primer 學習筆記(第八章)

c 使用標準庫類處理輸入和輸出 所有這些類都是通過繼承相互關聯的。輸入類繼承了istream,輸出類繼承了ostream。因此,可在istream物件上執行的操作同樣適用於ifstream或istringstream物件。而繼承ostream的輸出類也是類似的。所有io物件都有一組條件狀態,用來指示...

C Primer第五版筆記 關聯容器

一 型別 關聯容器支援高效的關鍵字查詢和訪問,標準庫中兩個主要的關聯容器是map和set。map中的元素是鍵值對關鍵字表示索引。set中每個元素只包含乙個關鍵字,set支援高效的關鍵字查詢。關聯容器根據三個特性可以分為8種 1 set還是map 2 關鍵字是否可以重複,允許重複的容器名字中都包含單詞...

C Primer第五版筆記 動態陣列

allocator類 為了讓new分配乙個物件陣列,需要在型別名後跟方括號,括號中是分配物件的數目,該數目必須是整型,但不必是常量 new t 分配的記憶體並不是得到乙個陣列,而是得到乙個陣列元素型別的指標,因此不能對動態陣列呼叫begin和end 與普通陣列不同的是,普通陣列不能定義長度為0的陣列...