iostream繼承層次:istream和ostream是最上層,istream派生出ifstream和istringstream,ostream派生出ofstream和ostringstream。他們兩者共同派生出iostream。iostream派生出stringstream和fstream。
標準庫型別不允許做複製或賦值操作。導致的現象:(1)如切記這個定義不能定義在main中,要為全域性變數àofstream out1,out2;out1=out2;則是不可以的。將out2傳遞給print(ofstream);函式也是不可以的。由於流物件不能複製,因此不能儲存在vector(或其他)容器中。
(2)形參或返回型別也不能為流型別,要傳遞或返回,必須傳遞或返回指向該物件的指標或引用。如:ofstream &print(ofstream&){}。或ofstream *print(ofstream*){}
io標準庫的條件狀態:(1)strm::iostate,由各個iostream類定義,用於定義條件狀態;(2)strm::badbit,strm::iostate型別的值,用於指出被破壞的流;(3)strm::failbit,strm::iostate型別的值,用於指出失敗的io操作;上述三個為特定的位模式,可用於位操作符;(4)strm::eofbit,strm::iostate型別的值,用於指出流已經達到檔案結束符;
流方法:(1)s.good()如果流s處於有效狀態,該函式返回true。(2)cin.rdstate()能讀取流當前的狀態,返回乙個iostate型別的值。
流必須處於無錯狀態才能用於輸入或輸出,如(1)if(cin)//直接檢查流的狀態;(2)while(cin>>word)//檢測條件表示式返回的流,從而間接地檢查了流的狀態。
多狀態的處理:可以這麼做,如:is.setstate(ifstream::badbit |ifstream::failbit);
緩衝區內容被重新整理的情況:(1)程式正常結束;(2)在一些不確定的時候,緩衝區可能已經滿了;(3)用操縱符顯示地重新整理緩衝區,如endl;(4)在每次輸出操作執行完後,用unitbuf操縱符設定流的內部狀態,從而清空緩衝區;(5)可將輸出流與輸入流關聯(tie)起來。這種情況,在讀輸入流時將重新整理其關聯的輸出緩衝區。
程式崩潰了,不會重新整理緩衝區。
flush用於重新整理流,但與endl不同在於不新增任何字元;ends在緩衝區插入空字元null,然後重新整理它,即cout<<1<<」output」<將輸出和輸入**在一起:感覺沒多大意思···如,cin.tie(&cout);…cin.tie(0);//呼叫tie傳遞0表示打破該流上存在的**。
標頭檔案是fstream。如輸入檔案:ofstream/ifstream infile(ifile.c_str());//ifile是希望讀寫的檔名的string物件。或者寫法為ofstream outfile;再用outfile.open(「out.txt」);。開啟檔案後,檢查開啟是否成功(這種習慣要養成)。if(!outfile)
如果outfile要關聯其他的檔案,則要先關閉原先的文字,再開啟另乙個檔案。
如果打算重用已存在的流物件,那麼while迴圈必須在每次迴圈時記得關閉(close())和清空(clear())檔案流。這邊關閉和清空順序隨意~。
ofstream物件指定out模式等效於同時指定
out和
trunc
預設情況下,fstream物件以in和out模式同時開啟。當檔案同時以in和out開啟時不清空。
標頭檔案為sstream。
stringstream特定的操作:(1)stringstream strm;建立自由的stringstream物件;(2)stringstream strm(s);建立儲存s的副本的stringstream物件,其中s
是string
型別的物件(不能用字串字面值直接進行賦值···如strm(「hello」)是錯誤的);(3)strm.str();建立strm中儲存的string型別物件;(4)strm.str(s);將string型別的s複製給strm,返回void。這邊可以用字串字面值,如
strm.str(「word」);
是可以的。
有些處理基於每行實現(getline可以實現),而其他處理則要操縱每行中每個單詞(每次乙個單詞可以cin>>string型別變數),可借助stringstream物件實現,如:
string line,word;
while(getline(cin,line))
}stringstream提供的轉換和/或格式化,如:
int val1 = 512,val2 = 1024;
ostringstreamformat_message;
format_message << "val1: "
<< val1 <<"\n"
<< "val2:"
<< val2 << "\n";
istringstreaminput_istring(format_message.str());
string dump1,dump2;
input_istring >> dump1 >>val1 >> dump2 >>val2;//注意這邊的順序,相當於輸入了
format_message.str()
,即輸入
val1:512\nval2:1024
。這邊\n
沒關係,就好比cin>>s1>>s2>>s3>>s4;
你輸入各種回車,都是忽略的。
cout<"--"
《當i=0時:
cout《為210,網上說跟編譯器有關,無需太糾結
cout<<++i<<++i<<++i< 8.2 條件狀態 io標準庫管理一系列條件狀態 condition state 成員,用來標記給定的io物件是否處於可用狀態,或者碰到了哪種特定的錯誤。strm iostate 機器相關的整型名,由各個iostream類定義,用於定義條件狀態。strm badbit strm iostate型別的值... 8.5 字串流 iostream標準庫支援記憶體中輸入 輸出,只要將流與儲存在程式記憶體中的string物件 起來即可。此時,可使用iostream輸入和輸出操作符讀寫這個string物件。標準庫定義了三種型別的字串流 istringstream,由istream派生而來,提供讀string的功能。... 當開啟乙個流時,標準i o函式fopen返回乙個指向file物件的指標。該物件通常是乙個結構,它包含了標準i o庫為管理該流所需要的所有資訊,包括 用於實現i o的檔案描述符 指向用於該流緩衝區的指標 緩衝區的長度 當前在緩衝區中的字元數以及出錯標誌等等。應用程式沒有必要檢驗file物件。對乙個程序...第8章 標準IO庫 2
第8章 標準IO庫 6
第5章 標準I O庫