對這段程序的觀察:
這是一段標準的ISO C++程序,使用了標準庫(standard library)。標準庫工具在命名空間std中聲明,封裝在沒有.h后綴的頭文件中。
如果你要在Windows下編譯它,你需要將它編譯成一個“控制臺程序”(console application)。記得將源文件加上.cpp后綴,否則編譯器可能會以為它是一段C代碼而不是C++。
是的,main()函數返回一個int值。
讀到一個標準的向量(vector)中,可以避免在隨意確定大小的緩沖中溢出的錯誤。讀到一個數組(array)中,而不產生“簡單錯誤”(silly error),這已經超出了一個新手的能力——如果你做到了,那你已經不是一個新手了。如果你對此表示懷疑,我建議你閱讀我的文章“將標準C++作為一種新的語言來學習”("Learning Standard C++ as a New Language"),你可以在本人著作列表(my publications list)中下載到它。
!cin.eof()是對流的格式的檢查。事實上,它檢查循環是否終結于發現一個end-of-file(如果不是這樣,那么意味著輸入沒有按照給定的格式)。更多的說明,請參見你的C++教科書中的“流狀態”(stream state)部分。
vector知道它自己的大小,因此我不需要計算元素的數量。
這段程序沒有包含顯式的內存管理。Vector維護一個內存中的棧,以存放它的元素。當一個vector需要更多的內存時,它會分配一些;當它不再生存時,它會釋放內存。于是,使用者不需要再關心vector中元素的內存分配和釋放問題。
程序在遇到輸入一個“end-of-file”時結束。如果你在UNIX平臺下運行它,“end-of-file”等于鍵盤上的Ctrl+D。如果你在Windows平臺下,那么由于一個BUG它無法辨別“end-of-file”字符,你可能傾向于使用下面這個稍稍復雜些的版本,它使用一個詞“end”來表示輸入已經結束。
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
vector<double> v;
double d;
while(cin>>d) v.push_back(d); // 讀入一個元素
if (!cin.eof()) { // 檢查輸入是否失敗
cin.clear(); // 清除錯誤狀態
string s;
cin >> s; // 查找結束字符
if (s != "end") {
cerr << "format error\n";
return 1; // 返回錯誤
}
}
文章來源于領測軟件測試網 http://www.kjueaiud.com/