// 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的陣列...