C++ primer摘要(6)---IO

IO庫

  • IO庫設(shè)施
- [x] istream(輸入流)類型,提供輸入操作
- [x] ostream(輸出流)類型,提供輸出操作
- [x] cin励负,一個(gè)istream對象绪抛,從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)
- [x] cout,一個(gè)ostream對象,向標(biāo)準(zhǔn)輸出寫入數(shù)據(jù)
- [x] cerr紫新,一個(gè)ostream對象,通常用于輸出程序錯(cuò)誤消息李剖,寫入到標(biāo)準(zhǔn)錯(cuò)誤
- [x] >>運(yùn)算符芒率,用來從一個(gè)istream對象讀取輸入數(shù)據(jù)
- [x] <<運(yùn)算符,用來向一個(gè)ostream對象寫入輸出數(shù)據(jù)
- [x] getline函數(shù)篙顺,從一個(gè)給定的istream讀取一行數(shù)據(jù)偶芍,存入一個(gè)給定的string對象中

IO類

管理輸出緩沖
  • 緩沖機(jī)制,操作系統(tǒng)就可以將程序的多個(gè)輸出操作組合成單一的系統(tǒng)級寫操作
  • 由于設(shè)備的寫操作可能會很耗時(shí)德玫,允許操作系統(tǒng)將多個(gè)輸出操作組合為單一的設(shè)備寫操作可以帶來很大的性能提升
  • 導(dǎo)致緩沖刷新(即數(shù)據(jù)真正寫到輸出設(shè)備或文件)的原因有如下幾個(gè):
- [x] 程序正常結(jié)束匪蟀,作為main函數(shù)的return操作的一部分,緩沖刷新被執(zhí)行
- [x] 緩沖區(qū)滿時(shí)宰僧,需要刷新緩沖材彪,而后新的數(shù)據(jù)才能繼續(xù)寫入緩沖區(qū)
- [x] 可以使用操作符endl來顯式刷新緩沖區(qū)
- [x] 在每個(gè)輸出操作之后,我們可以用操作符unitbuf設(shè)置流的內(nèi)部狀態(tài)撒桨,來情況緩沖區(qū)查刻,默認(rèn)情況下,對cerr是設(shè)置unitbuf的凤类,因此寫道cerr的內(nèi)容是立即刷新的
- [x] 一個(gè)輸出流可能被關(guān)聯(lián)到另一個(gè)流穗泵,在這種情況下,當(dāng)讀寫被關(guān)聯(lián)的流時(shí)谜疤,關(guān)聯(lián)到的流的緩沖區(qū)會被刷新佃延,例如,默認(rèn)情況下夷磕,cin和cerr都關(guān)聯(lián)到cout履肃,因此,讀cin或?qū)慶err都會導(dǎo)致cout的緩沖區(qū)被刷新
  • 刷新輸出緩沖區(qū)
- [x] 操縱符`endl`坐桩,`flush`以及`ends`可以刷新緩沖區(qū)
cout<<"hi!"<<endl;      //輸出hi和一個(gè)換行符尺棋,然后刷新緩沖區(qū)
cout<<"hi!"<<flush;     //輸出hi,然后刷新緩沖區(qū)绵跷,不附加任何額外字符
cout<<"hi!"<<ends;      //輸出hi和一個(gè)空字符膘螟,然后刷新緩沖區(qū)
  • unitbuf操縱符
- [x] 如果想在每次輸出操作之后都刷新緩沖區(qū)碾局,我們可以使用unitbuf操縱符荆残,它告訴流在接下來的每次寫操作之后進(jìn)行一次flush操作净当,而nounitbuf操縱符則重置流蕴潦,使其恢復(fù)使用正常的系統(tǒng)管理的緩沖區(qū)刷新機(jī)制
cout << unitbuf;        //所有輸出操作后都會立即刷新緩沖區(qū)
cout << nounitbuf;      //回到正常的緩沖方式
  • 如果程序崩潰,輸出緩沖區(qū)不會被刷新

文件輸入輸出

  • 頭文件fstream定義了三個(gè)類型來支持文件的IO操作
- [x] ifstream俘闯,從一個(gè)給定文件讀取數(shù)據(jù)
- [x] ofstream潭苞,向一個(gè)給定文件寫入數(shù)據(jù)
- [x] fstream,可以讀寫給定文件
使用文件流對象
  • read函數(shù)
ifstream input(strInFile);
ofstream output(strOutFile);    
Sales_data total;               
read(input,total);   
//通過ifstream將數(shù)據(jù)讀取到total
  • 一旦一個(gè)文件流已經(jīng)打開萄传,它就保持與對應(yīng)文件的關(guān)聯(lián),在關(guān)聯(lián)關(guān)閉之前,無法被其他文件流關(guān)聯(lián)
  • 當(dāng)一個(gè)fstream對象被銷毀時(shí)振诬,close會自動調(diào)用
文件模式
  • 每一個(gè)流都有一個(gè)關(guān)聯(lián)的文件模式蹭睡,用來指出如何使用文件
in          以讀方式打開
out         以寫方式打開
app         每次寫操作前定位到文件末尾
ate         打開文件后立即定位到文件末尾
trunc       截?cái)辔募?binary      以二進(jìn)制方式進(jìn)行IO操作
  • 無論哪種方式打開文件,都可以指定文件模式赶么,調(diào)用open打開文件時(shí)可以肩豁,用一個(gè)文件名初始化流來隱式打開文件時(shí)也可以
  • 以out模式打開文件會丟棄已有數(shù)據(jù)
- [x] 默認(rèn)情況下辫呻,當(dāng)我們打開一個(gè)ofstream時(shí)清钥,文件的內(nèi)容會被丟棄
- [x] 保留被ofstream打開的文件中已有數(shù)據(jù)的唯一方法是顯式指定app或in模式
  • 每次調(diào)用open時(shí)都會確定文件模式
- [x] 在每次打開文件時(shí)放闺,都要設(shè)置文件模式,可能是顯式的設(shè)置怖侦,也可能是隱式的設(shè)置,當(dāng)程序未指定模式時(shí)搬葬,就是用默認(rèn)值

string流

  • sstream頭文件定義了三個(gè)類型來支持內(nèi)存IO,這些類型可以向string寫入數(shù)據(jù)急凰,從string讀取數(shù)據(jù),就像string是一個(gè)IO流一樣
- [x] `istringstream`從string讀取數(shù)據(jù)
- [x] `ostringstream`向string寫入數(shù)據(jù)
- [x] `stringstream`既可以從string讀取數(shù)據(jù)也可以向string寫入數(shù)據(jù)
  • fstream類型類似抡锈,頭文件sstream中定義的類型都繼承自iostream頭文件中定義的類型
istringstream使用
  • 當(dāng)需要對整行文本進(jìn)行處理码倦,而其他一些工作是處理行內(nèi)單個(gè)單詞時(shí),通常使用istringstream
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袁稽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子补疑,更是在濱河造成了極大的恐慌歧沪,老刑警劉巖莲组,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撵孤,居然都是意外死亡竭望,警方通過查閱死者的電腦和手機(jī)邪码,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咬清,“玉大人,你說我怎么就攤上這事影钉。” “怎么了平委?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵杖小,是天一觀的道長。 經(jīng)常有香客問我予权,道長,這世上最難降的妖魔是什么扫腺? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮攒至,結(jié)果婚禮上躁劣,老公的妹妹穿的比我還像新娘迫吐。我一直安慰自己账忘,他們只是感情好熙宇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布溉浙。 她就那樣靜靜地躺著,像睡著了一般戳稽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惊奇,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天赊时,我揣著相機(jī)與錄音吨铸,去河邊找鬼。 笑死辖源,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抬纸。 我是一名探鬼主播耿戚,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膜蛔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皂股,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎就斤,沒想到半個(gè)月后蘑辑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洋机,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绷旗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刁标。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顿锰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硼控,到底是詐尸還是另有隱情,我是刑警寧澤牢撼,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布疑苫,位于F島的核電站,受9級特大地震影響捍掺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挺勿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望禾嫉。 院中可真熱鬧,春花似錦熙参、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鞋诗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間削彬,已是汗流浹背秀仲。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工壶笼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人覆劈。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像责语,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子坤候,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355