程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Iostreams 用法詳解(四)緩沖區

C++ Iostreams 用法詳解(四)緩沖區

編輯:C++入門知識

續:

C++ Iostreams 用法詳解(一)整體把握

C++ Iostreams 用法詳解(二)標准入輸出

C++ Iostreams 用法詳解(三)狀態標志位

期中考試終於告一段落,再來繼續寫咯。

在前面說到過每一個iostream對象都有一個緩沖區,我們稱之為流緩沖區,那個這個所謂的流緩沖區是怎麼存在的呢?iostreams中將該流緩沖區抽象為一個類,即streambuf類。

每個iostream的類都會包含一個指向streambuf對象的指針,這也就意味著我們可以直接的去訪問到這個指針,並向該streambuf對象發送消息等(但是一般情況下我們並不需要這樣做)。

既然說我們可以得到這個指針,那isotreams類當然會提供訪問的接口了,這就是const成員函數rdbuf(),它會返回iostream對象所有的streambuf也就是緩沖區的指針。那這個緩沖區的指針有什麼用呢?最常用的就是直接對其進行輸入輸出操作,看下面的例子:

1.txt內容:
hello world~~!!
my name is zorro.
nice to meet you~
int main() {
    ifstream fin("1.txt");
    cout << fin.rdbuf() << endl;
    system("pause");
    return 0;
}

上面的程序輸出為:

    ifstream fin("1.txt");
    string str;
    fin >> str;
    cout << fin.rdbuf() << endl;
    system("pause");
    return 0;
}

上面的程序輸出為:

    ifstream fin("1.txt");
    string str;
    fin >> str;
    fin.seekg(2,ios::beg);
    cout << fin.rdbuf() << endl;
    system("pause");
    return 0;
}

這個程序的輸出為:

#define PRINTANDEXEC(st) cout << #st << endl; st
int main() {
    PRINTANDEXEC(ifstream fin("1.txt"));
    PRINTANDEXEC(string str);
    PRINTCURPOS(fin);
    PRINTANDEXEC(fin >> str);
    PRINTCURPOS(fin);
    PRINTANDEXEC(fin.seekg(2,ios::beg));
    PRINTCURPOS(fin);
    PRINTANDEXEC(cout << fin.rdbuf() << endl);
    PRINTCURPOS(fin);
    system("pause");
    return 0;
}

上面的程序輸出為:

image_thumb[3]

以上只演示了get指針的的使用,關於put指針的使用跟get指針差不多,就不贅述了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved