最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++中的基本IO類型詳解

 更新時間:2021年07月23日 08:55:10   作者:HickeyZhang  
IO的設(shè)備可以是文件、控制臺、string。c++主要定義了三種IO類型,分別被包含在iostream、fstream、sstream頭文件中,本文給大家分享c++中的基本IO類型,感興趣的朋友跟隨小編一起看看吧

引言

c++不直接處理輸入和輸出,而是通過標(biāo)準(zhǔn)庫中的類型處理IO。IO的設(shè)備可以是文件、控制臺、string。c++主要定義了三種IO類型,分別被包含在iostream、fstream、sstream頭文件中。

為了支持使用寬字符的語言,標(biāo)準(zhǔn)庫定義了一組類型和對象操縱wchar_t類型的數(shù)據(jù)。

以下是這三種IO庫類型以及頭文件:

  • iostream頭文件

istream(寬字符版本wistream),從流讀取數(shù)據(jù)。
ostream (寬字符版本wostream),向流寫入數(shù)據(jù)。
iostream(寬字符版本wiostream),讀寫流。

  • fstream頭文件

ifstream(寬字符版本wifstream),從文件讀取數(shù)據(jù)。
ofstream (寬字符版本wofstream),向文件寫入數(shù)據(jù)。
fstream(寬字符版本wfstream),讀寫文件。

  • sstream頭文件

istringstream(寬字符版本wistringstream),從string讀取數(shù)據(jù)。
ostringstream (寬字符版本wostringstream),向string寫入數(shù)據(jù)。
stringstream(寬字符版本wstringstream),讀寫string。

設(shè)備類型和字符大小不會影響我們要執(zhí)行的IO操作。得益于繼承機(jī)制,以上類型都可以使用>>、<<運算符以及getline()函數(shù)。

IO類型的通用特性

IO對象不能拷貝或賦值

istream is1,is2;
is1 = is2; //錯誤,流對象不能賦值
istream is3(is1); //錯誤,流對象不能拷貝

由于無法拷貝IO對象,因此不能將形參或返回類型設(shè)置為流類型。通常使用引用方式傳遞和返回流。但傳遞和返回的引用不能是const的,因為讀寫IO對象會改變IO對象的狀態(tài),也就是改變了IO對象。

IO對象的狀態(tài)信息

IO類定義了一些函數(shù)和標(biāo)志位,幫助我們檢查和操縱流的狀態(tài):

  • strm::iostate是一種類型,這種類型就像一串二進(jìn)制位串,每個二進(jìn)制位串指出了流的狀態(tài)。(strm為引言中的任意一種IO類型)。
  • eof()函數(shù)用于在IO對象上調(diào)用,如cin.eof()。如果流檢測到eof(文件結(jié)束標(biāo)志),該函數(shù)返回true。
  • fail()函數(shù)使用同上。如果流處于崩潰或IO操作失敗的狀態(tài),返回true。
  • bad()函數(shù)使用同上。如果流處于崩潰狀態(tài),返回true。
  • good()函數(shù)使用同上。如果流處于有效狀態(tài),返回true。clear()函數(shù)使用同上。將IO對象中的所有條件狀態(tài)為復(fù)位,流的狀態(tài)變?yōu)橛行顟B(tài),返回void。
  • setstate(flags),將IO對象的狀態(tài)為按flags(類型為strm::iostate)指示的那樣置位。
  • rdstate()函數(shù)用于在IO對象上調(diào)用,讀取IO對象的狀態(tài)位,返回類型為strm::iostate。

一旦流發(fā)生錯誤,這個流上的后續(xù)IO操作都會失敗,因此最好在使用流之前檢查它是否處于良好狀態(tài)。如

// 如果輸入成功,流保持有效狀態(tài),條件為真
while(cin >> word){
    //讀操作成功,其他操作。
}

輸出緩沖

所有輸出流都管理一個緩沖區(qū),用來保存程序讀寫的數(shù)據(jù)。

cout << "Hello World!";

串"Hello World!"可能被立即打印出來,也可能被操作系統(tǒng)保存在緩沖區(qū),隨后打印。

以下原因可以刷新緩沖(即真正將數(shù)據(jù)輸出到目標(biāo)設(shè)備或文件中):

  • 程序正常結(jié)束,自動刷新。
  • 緩沖區(qū)滿時,自動刷新。
  • 可以使用操作符endl、flush、ends手動刷新緩沖區(qū)(只作用一次輸出)。
cout << "1" << endl; //字符串后添加換行,然后刷新緩沖區(qū)
    cout << "2" << flush; //僅刷新緩沖區(qū)
    cout << "3" << ends;  //字符串后添加一個空字符,然后刷新緩沖區(qū)。

通過操作符unitbuf設(shè)置自動刷新。不同于endl、flushends只作用于一次輸出,設(shè)置了unitbuf后的輸出流每輸出一次都會自動刷新緩沖區(qū)。

cout << unitbuf;//下面的語句每執(zhí)行一次輸出,就刷新一次緩沖區(qū)。
    cout << "1"; //輸出"1",自動刷新緩沖區(qū)
    cout << "2"; //輸出"2",自動刷新緩沖區(qū)
    cout << "3"; //輸出"3",自動刷新緩沖區(qū)
    cout << "4"; //輸出"4",自動刷新緩沖區(qū)
    ...
    cout << "nounitbuf"; //回到流默認(rèn)的緩沖方式

關(guān)聯(lián)流。讀寫被關(guān)聯(lián)的流時,關(guān)聯(lián)到的流的緩沖區(qū)會被刷新(tie()函數(shù)括號里面的是關(guān)聯(lián)到的流,調(diào)用tie()的流是被關(guān)聯(lián)的流)。cout 和 cin默認(rèn)關(guān)聯(lián)在一起,使用cin讀取數(shù)據(jù)時,cout的緩沖區(qū)被刷新。

 cout << "Fuck you!"; //沒有指定操作符,cout默認(rèn)不刷新,該語句執(zhí)行完后"Fuck you!"可能立即被輸出到屏幕,也可能稍后被輸出。
    int i;
    cin >> i; //cout的緩沖區(qū)被刷新,此時"Fuck you!"一定已經(jīng)真正輸出(可能在之前就已經(jīng)真正輸出,此時刷新緩沖區(qū)等于什么都沒做)。

使用tie()函數(shù)關(guān)聯(lián)流和解除關(guān)聯(lián):

 cin.tie(&cout); //有參數(shù)的tie(),參數(shù)為指向流的指針,且指針不為空,此時建立關(guān)聯(lián)。
    cin.tie(nullptr); //有參數(shù)的tie(),且指針為空,此時解除cin和其他流的關(guān)聯(lián)。
    cin.tie(); //無參tie(),返回指向cin當(dāng)前關(guān)聯(lián)到的流的指針。

Note:

若程序崩潰即異常終止,輸出緩沖區(qū)不會被刷新,換言之,緩沖區(qū)中的數(shù)據(jù)可能并沒有真正被輸出到文件或設(shè)備。

文件IO

創(chuàng)建文件流

前面所過,所有IO類型都可以使用>>、 <<getline(),除此之外,文件IO還有一些特有的操作。

創(chuàng)建文件流:

 fstream fstrm1; //創(chuàng)建未綁定文件的文件流
    fstream fstrm2(s1); //創(chuàng)建綁定到指定文件s1的文件流(自動調(diào)用open())。s1是string或指向c風(fēng)格字符串的指針。
    //fstream fstrm3(s2, mode); 與第二條語句類似,但指定打開文件的模式。

Note:

當(dāng)一個fstream的作用域內(nèi)的代碼執(zhí)行完畢,fstream關(guān)聯(lián)的文件被自動關(guān)閉,即fstream對象被銷毀時,close()會自動調(diào)用。

open和close

使用open打開文件,close關(guān)閉文件。對一個已經(jīng)打開的文件調(diào)用open會失敗,并且failbit被置位。

string file1 = "qq.dat";
    ifstream ifs;
    ifs.open(file1);
    //讀取操作
    ifs.close();

文件模式mode

常用的文件模式mode如下:

  • in 只讀方式打開文件
  • out 以寫方式打開文件
  • app 每次寫操作在文件末尾進(jìn)行
  • ate 打開文件后立即定位到文件末尾
  • trunc 截斷文件,即輸出會覆蓋文件中的原有數(shù)據(jù)。
  • binary 以二進(jìn)制方式打開文件

同時指定多個模式時使用|分隔:

    ofstream ofs("file1", ofstream::out | ofstream::app);

Note:

out模式隱含trunc即覆蓋原文件,若要在原文件末尾添加數(shù)據(jù),則需要顯式指明app模式。

若沒有指定任何模式,則使用默認(rèn)模式。

string IO

stringstream獨有的操作如下:

 sstream strm;   //sstream為sstream頭文件中定義的類型,具體可以是istringstream等。
    sstream strm(s); //建立一個sstream對象,保存字符串s的一個拷貝。
    strm.str(); //返回strm保存的string的拷貝。
    strm.str(s); //將string s拷貝到strm。

聲明:
c++ Basic是對《C++ Primer 第五版》的個人總結(jié)與疑難解釋,主要用于個人日后復(fù)習(xí)。
如果想要深入了解更多,請支持正版。

到此這篇關(guān)于c++中的基本IO的文章就介紹到這了,更多相關(guān)c++ io流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++基于消息隊列的多線程實現(xiàn)示例代碼

    C++基于消息隊列的多線程實現(xiàn)示例代碼

    這篇文章主要給大家介紹了關(guān)于C++基于消息隊列的多線程實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C++實現(xiàn)紅黑樹核心插入實例代碼

    C++實現(xiàn)紅黑樹核心插入實例代碼

    紅黑樹是一種二叉搜索樹,但在每個結(jié)點上增加一個存儲位表示結(jié)點的顏色,可以是Red或Black,下面這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)紅黑樹核心插入的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 淺析c++函數(shù)參數(shù)和返回值

    淺析c++函數(shù)參數(shù)和返回值

    c++一直以來是一個關(guān)注效率的代碼,這樣關(guān)于函數(shù)的參數(shù)傳遞和返回值的接收,是重中之重,這篇文章主要介紹了c++函數(shù)參數(shù)和返回值,需要的朋友可以參考下
    2023-05-05
  • C++按位異或運算符的使用介紹

    C++按位異或運算符的使用介紹

    本篇文章對C++按位異或運算符的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • C語言初識變量常量字符串轉(zhuǎn)義符及注釋方式簡介

    C語言初識變量常量字符串轉(zhuǎn)義符及注釋方式簡介

    最強(qiáng)的C語言筆記,此處對于C語言的基礎(chǔ)部分做一個簡要的介紹,作者實屬初學(xué),寫博客也是作者學(xué)習(xí)的一個過程,若文中內(nèi)容有理解不到位或者有不當(dāng)之處,還請朋友們不吝指正
    2021-11-11
  • c++中ref的作用示例解析

    c++中ref的作用示例解析

    這篇文章主要為大家介紹了c++中ref的作用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • win32 api實現(xiàn)2048游戲示例

    win32 api實現(xiàn)2048游戲示例

    這篇文章主要介紹了win32 api實現(xiàn)2048游戲示例,需要的朋友可以參考下
    2014-05-05
  • C++超詳細(xì)分析順序表

    C++超詳細(xì)分析順序表

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-03-03
  • C語言中使用fopen()打開和操作文件的詳細(xì)方法指南

    C語言中使用fopen()打開和操作文件的詳細(xì)方法指南

    fopen是C語言庫函數(shù),open是系統(tǒng)調(diào)用,mmap是將大文件映射到內(nèi)存中使用,這篇文章主要給大家介紹了關(guān)于C語言中使用fopen()打開和操作文件的詳細(xì)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • C++實現(xiàn)大數(shù)相乘算法

    C++實現(xiàn)大數(shù)相乘算法

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)大數(shù)相乘算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

商南县| 新化县| 禄丰县| 龙里县| 贺州市| 望城县| 罗平县| 阿拉善盟| 游戏| 龙门县| 烟台市| 阜新| 瓮安县| 阿尔山市| 洛宁县| 西贡区| 隆尧县| 余江县| 建德市| 盱眙县| 百色市| 福贡县| 洪江市| 美姑县| 封开县| 原阳县| 五常市| 敦煌市| 沧源| 巴林左旗| 石嘴山市| 越西县| 佛教| 灵川县| 荆门市| 金湖县| 吉木乃县| 克拉玛依市| 皮山县| 凤阳县| 洛扎县|