日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

C++Primer 第8章IO流

發(fā)布時(shí)間:2024/1/8 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++Primer 第8章IO流 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++Primer 第8章 IO流

  • 寫(xiě)在前面
  • 首先是main()處理命令行選項(xiàng),后面會(huì)用到
  • IO類(lèi)
  • iostream
    • a.條件狀態(tài)
    • b.輸出緩沖
  • fstream
    • a.fstream 特有的操作
    • b.使用
    • c.文件模式
  • sstream
    • a.特有操作
    • b.使用

寫(xiě)在前面

經(jīng)過(guò)前面初級(jí)部分的學(xué)習(xí),我進(jìn)入該書(shū)所寫(xiě)的中級(jí)階段——C++標(biāo)準(zhǔn)庫(kù),這里會(huì)講到C++所自帶的最核心的標(biāo)準(zhǔn)庫(kù),之前聽(tīng)過(guò)侯捷老師的課,有幸感受到標(biāo)準(zhǔn)庫(kù)的強(qiáng)大與精妙。正如本書(shū)所說(shuō),標(biāo)準(zhǔn)庫(kù)是值得每一位C++程序員應(yīng)該掌握的。這里給自己鼓勁!
附上幾張我上周末終南山的照片:



是挺美的,不過(guò)我去的時(shí)候剛好遇上下雨,行走在云中,能見(jiàn)距離不到10m,看不見(jiàn)遠(yuǎn)處的景吧,但是也別有一番夢(mèng)境的氛圍哈哈哈。
下面開(kāi)始言歸正傳!
做個(gè)總結(jié)吧,我會(huì)更改我之前的寫(xiě)博文的風(fēng)格的,之前的博文風(fēng)格十分狂野,只有代碼沒(méi)有解釋,這對(duì)于我的讀者,或者我之后的查閱復(fù)習(xí)都非常的不方便。
那么我將會(huì)在之后的文章中,盡可能的解釋清楚每一個(gè)知識(shí)點(diǎn),這對(duì)我也是算是一種新嘗試吧,希望我能堅(jiān)持下去!

首先是main()處理命令行選項(xiàng),后面會(huì)用到

int main(){}

這個(gè)東西其實(shí)是可以有時(shí)也是需要傳入實(shí)參的,

int main(int argc,char **argv){} //也可以寫(xiě)成: int main(int argc,char *argv[]){}

這里傳入的第二個(gè)參數(shù)是一個(gè)char數(shù)組的指針,所以使用**表示我個(gè)人感覺(jué)更加通俗一些,這樣argv[]里面的數(shù)據(jù)就可以在主函數(shù)塊中被調(diào)用起來(lái)(p196)。值得注意的是該數(shù)組最后一個(gè)數(shù)據(jù)應(yīng)當(dāng)為0,并且自動(dòng)生成。

IO類(lèi)

分為iostream、fstream、sstream
后兩者繼承于第一個(gè)
iostream用于控制流,fstream用于控制文件,sstream用于控制字符串,這三每個(gè)又分為讀和寫(xiě)兩個(gè)頭文件,為了方便起見(jiàn),直接include以上三種就可以同時(shí)操作讀和寫(xiě)了,當(dāng)然也可以單獨(dú)的指定。

iostream

這中類(lèi)對(duì)象不能賦值、拷貝和初始化。

a.條件狀態(tài)

流在執(zhí)行的時(shí)候的狀態(tài)可以用這些來(lái)表示:

//8.1.2 #include<iostream> #include<stdexcept> using namespace std; int main() {//1int ival;while (cin >> ival){//8.3/*遇見(jiàn)結(jié)束符,與io錯(cuò)誤時(shí),返回false*/cout << ival << endl;} } //那么如何查詢(xún)呢我們輸入失敗在哪里呢 //2 //8.1,8.2 #include<iostream> #include<stdexcept> using namespace std; istream& f(istream& in) {int v;while (in >> v, !in.eof()){//遇見(jiàn)文件結(jié)束符,其他的在p280if (in.bad()) //badbit置位throw runtime_error("IO流錯(cuò)誤");if (in.fail()) //failbit置位或badbit置位{cerr << "數(shù)據(jù)錯(cuò)誤,請(qǐng)重試" << endl;in.clear(); //復(fù)位in.ignore(100, '\n'); //不管當(dāng)前之后的100個(gè)字符,第101個(gè)重新進(jìn)入循環(huán)continue;}cout << v << endl;} } int main() {//輸入一些整數(shù)f(cin); }

b.輸出緩沖

每個(gè)輸出流都有一個(gè)緩沖流,因?yàn)樽x入計(jì)算機(jī)需要耗時(shí),那么緩存一起讀入則會(huì)提高性能。
有以下操作可以使得緩沖區(qū)被刷新:

1.緩沖區(qū)滿 2.換行符endl 3.unitbuf操作符 4.cin出現(xiàn)cout與cerr都會(huì)刷新

But,我們需要注意的時(shí)程序崩潰時(shí),緩沖區(qū)不會(huì)被刷新。
但是,p283tie沒(méi)看懂呀。。。

fstream

fstream繼承于iostream因此父類(lèi)的操作fstream也可以操作

a.fstream 特有的操作

構(gòu)造函數(shù):fstream fstr(s, mode); 打開(kāi)s文件,mode為打開(kāi)模式默認(rèn)依賴(lài)于fstream fstr.open(s); 打開(kāi)s并與fstr綁定,這里的s可以時(shí)一個(gè)字符串哦,也有默認(rèn)mode fstr.close(); 關(guān)閉fstr綁定的文件 str.is_open() 返回bool,檢查是否打開(kāi)成功

b.使用

//8.4 #include<iostream> #include<fstream> #include<string> #include<vector> using namespace std;int main() {ifstream in("data");if (!in)cerr << "無(wú)法打開(kāi)文件" << endl;string line;vector<string> words;while (cin>>line)words.push_back(line);in.close();for (auto i : words)cout << i << endl; }

c.文件模式

這里介紹的也就是mode:

in 讀方式 out 寫(xiě)方式 app 寫(xiě)操作定位到文件尾 ate 打開(kāi)立即定位到文件尾 trunc 截?cái)辔募?binary 以二進(jìn)制j進(jìn)行IO

//8.5
cin改為getline
//8.8
加入?yún)?shù)app

sstream

這個(gè)家伙是處理字符串的,同樣繼承于iostream

a.特有操作

構(gòu)造函數(shù):sstream sstr(s) 保存一個(gè)string的拷貝 sstr.str() 返回string的拷貝 sstr.str(s) 將s拷貝到sstr中

b.使用

//8.9 #include<iostream> #include<string> #include<sstream> #include<stdexcept> using namespace std; istream& f(istream& in) {string str;while (in >> str, !in.eof()){//遇見(jiàn)文件結(jié)束符,其他的在p280if (in.bad()) //badbit置位throw runtime_error("IO流錯(cuò)誤");if (in.fail()) //failbit置位或badbit置位{cerr << "數(shù)據(jù)錯(cuò)誤,請(qǐng)重試" << endl;in.clear(); //復(fù)位in.ignore(100, '\n'); //不管當(dāng)前之后的100個(gè)字符,第101個(gè)重新進(jìn)入循環(huán)continue;}cout << str << endl;} } int main() {//輸入一些字符串f(cin); } //8.10 #include<iostream> #include<fstream> #include<sstream> #include<string> #include<vector> using namespace std; int main() {ifstream in("data");if (!in)cerr << "無(wú)法打開(kāi)文件" << endl;string line;vector<string> words;while (getline(in, line))words.push_back(line);in.close();for (auto i : words)cout << i << endl;in.close();for (auto it : words){istringstream itline(it);string word;while (itline >> word)cout << word << " ";cout << endl;} }

這里8.3.2沒(méi)有做解釋,留到第17章吧。

總結(jié)

以上是生活随笔為你收集整理的C++Primer 第8章IO流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。