Primer 第八章 深入IO

2021-10-09 03:32:49 字數 3353 閱讀 4606

istream (輸入流) 型別 cin 為其乙個物件 從標準輸入讀取資料

ostream (輸出流) 型別 cout 為其乙個物件 向標準輸出寫入資料

cerr 為其乙個物件 通常輸出程式錯誤資訊 寫入到標準錯誤

重定向>> 從乙個 istream 物件讀取輸入資料

<< 向乙個 ostream 物件寫入輸出資料

getline 從乙個給定的 istream 讀取一行資料 存入乙個給定的 string 物件

iostream 定義了用於讀寫流的基本型別

fstream 定義了讀寫命名檔案的型別

sstream 定義了讀寫記憶體string物件的型別

每種都還包含對應的寬字元型別

io 物件無拷貝或賦值所以不能將形參或返回型別設定為流型別

進行 io 操作的函式通常以引用方式傳遞和返回流

state

desc

function

strm::iostatestrm是一種io型別

iostate是一種機器相關的整型提供了表達條件狀態的完整功能

strm::badbit用來指出流已崩潰

strm::failbit用來指出乙個io操作失敗了

strm::eofbit用來指出流達到了檔案結束

strm::goodbit用來指出流未處於錯誤狀態 此值保證為零

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(flag)根據給定的 flags 標誌位 將流 s 中對於條件狀態位復位flag 的型別是strm::iostate返回 void

s.setstate(flag)根據給定的 flags 標誌位 將流 s 中對於條件狀態位置位 flag 的型別是strm::iostate返回 void

s.rdstate()返回流 s 的當前條件

返回值型別為strm::iostate

描述

buffer flash

endl 重新整理緩衝 換行

flush 重新整理緩衝

ends 重新整理緩衝 插入空字元

unibuf

cout << unitbuf;

//所有輸出操作後都會立即重新整理緩衝區

// 任何輸出都立即重新整理 無緩衝

cout << nounitbuf;

//回到正常的緩衝方式

當乙個輸入流被關聯到乙個輸出流時 任何試圖從輸入流讀取資料的操作都會先重新整理關聯的輸出流

標準庫將 cout 和 cin關聯在一起

接受乙個指向ostream的指標 將自己關聯到此ostream返回之前的關聯輸出流的指標

每個流同時最多關聯到乙個流 但多個流可以同時關聯到同乙個ostream

fstream特有的操作

code

desc

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

fstream fstrm(s)建立乙個fstream 並開啟名為s的檔案 預設的檔案模式mode依賴於 fstream 的型別

fstream fstrm(s,mode)與前乙個建構函式類似 但按指定mode開啟檔案

fstrm.open(s)開啟名為s的檔案 並將檔案與fstrm繫結 預設的檔案mode依賴於 fstream 的型別 返回void

fstrm.close()關閉與fstrm繫結的檔案 返回void

fstrm.is_open()返回乙個bool值 指出與fstrm關聯的檔案是否成功開啟且尚未關閉

成員函式 open 和 close

如果定義了乙個空檔案流物件,可以隨後呼叫 open 來將它與檔案關聯起來

通常需要檢測 open 是否成功

file mode

desc

in以讀的方式開啟

out以寫的方式開啟

每次寫操作前均定位在檔案末尾

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

trunc截斷檔案

binary以二進位制形式進行io

fstream 物件和cin cout 同樣使用

標頭檔案

code

desc

stringstream strm;

stringstream strm(s);此建構函式是explicit的

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

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

stringstream繫結到乙個 string 物件上

相當於存入乙個string中去,只是統一了 io 形式

重定向 >> 在 io 中遇到空格會中止,所以該形式的 io 統一有意義,在句子分詞中效果明顯

demo

stringstream使用

#include

#include

void

testsstream()

控制符

#include

#include

void

testmanip()

Primer 第八章 順序容器

六種順序容器 不支援快速隨機訪問 無腦vector 要求中間插入或者刪除,list 或者 forward list 復合型別,可以先用 list 或者 forward list 做,再用 vector 存放 容器操作 size add delete element get iterator iter...

第八章 IO庫

由於不能拷貝 io 物件,因此我們也不能將形參或返回型別設定為流型別。進行 io 操作的函式通常以引用方式傳遞和返回流。讀寫乙個 io 物件會改變其狀態,因此傳遞和返回的引用不能是 const 導致緩衝區重新整理 即,資料真正寫到輸出裝置或檔案 的原因 程式正常結束,作為 main 函式的 retu...

第八章 IO庫

表8.1是標準庫中的這些io型別和標頭檔案 為支援寬字元語言,標準庫定義的io類也可操縱wchar t型別資料,它對應的型別和函式名以w開始 裝置型別和字元寬度不會影響io操作,例如 運算子對控制台視窗 檔案 字串都可用,對char和wchar t也可用 通過繼承,標準庫可忽略這些不同裝置和不同字元...