續:
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;
}
上面的程序輸出為:
以上只演示了get指針的的使用,關於put指針的使用跟get指針差不多,就不贅述了。