日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++Primer 第8章IO流

發布時間:2024/1/8 c/c++ 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++Primer 第8章IO流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++Primer 第8章 IO流

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

寫在前面

經過前面初級部分的學習,我進入該書所寫的中級階段——C++標準庫,這里會講到C++所自帶的最核心的標準庫,之前聽過侯捷老師的課,有幸感受到標準庫的強大與精妙。正如本書所說,標準庫是值得每一位C++程序員應該掌握的。這里給自己鼓勁!
附上幾張我上周末終南山的照片:



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

首先是main()處理命令行選項,后面會用到

int main(){}

這個東西其實是可以有時也是需要傳入實參的,

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

這里傳入的第二個參數是一個char數組的指針,所以使用**表示我個人感覺更加通俗一些,這樣argv[]里面的數據就可以在主函數塊中被調用起來(p196)。值得注意的是該數組最后一個數據應當為0,并且自動生成。

IO類

分為iostream、fstream、sstream
后兩者繼承于第一個
iostream用于控制流,fstream用于控制文件,sstream用于控制字符串,這三每個又分為讀和寫兩個頭文件,為了方便起見,直接include以上三種就可以同時操作讀和寫了,當然也可以單獨的指定。

iostream

這中類對象不能賦值、拷貝和初始化。

a.條件狀態

流在執行的時候的狀態可以用這些來表示:

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

b.輸出緩沖

每個輸出流都有一個緩沖流,因為讀入計算機需要耗時,那么緩存一起讀入則會提高性能。
有以下操作可以使得緩沖區被刷新:

1.緩沖區滿 2.換行符endl 3.unitbuf操作符 4.cin出現cout與cerr都會刷新

But,我們需要注意的時程序崩潰時,緩沖區不會被刷新。
但是,p283tie沒看懂呀。。。

fstream

fstream繼承于iostream因此父類的操作fstream也可以操作

a.fstream 特有的操作

構造函數:fstream fstr(s, mode); 打開s文件,mode為打開模式默認依賴于fstream fstr.open(s); 打開s并與fstr綁定,這里的s可以時一個字符串哦,也有默認mode fstr.close(); 關閉fstr綁定的文件 str.is_open() 返回bool,檢查是否打開成功

b.使用

//8.4 #include<iostream> #include<fstream> #include<string> #include<vector> using namespace std;int main() {ifstream in("data");if (!in)cerr << "無法打開文件" << 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 寫方式 app 寫操作定位到文件尾 ate 打開立即定位到文件尾 trunc 截斷文件 binary 以二進制j進行IO

//8.5
cin改為getline
//8.8
加入參數app

sstream

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

a.特有操作

構造函數:sstream sstr(s) 保存一個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()){//遇見文件結束符,其他的在p280if (in.bad()) //badbit置位throw runtime_error("IO流錯誤");if (in.fail()) //failbit置位或badbit置位{cerr << "數據錯誤,請重試" << endl;in.clear(); //復位in.ignore(100, '\n'); //不管當前之后的100個字符,第101個重新進入循環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 << "無法打開文件" << 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沒有做解釋,留到第17章吧。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。