C++代碼擁有很多成熟的用於網絡通信的庫,其中最具有代表性的是跨平台的、重量級的ACE庫,該庫可以說是C++語言最重要的成果之一,下面就進行學習研究,希望大家能夠得到自己想要的東西。
特別是在一個學期的開始,我常常收到許多關於編寫一個非常簡單的程序的詢問。這個問題有一個很具代表性的解決方法,那就是在你的程序中)讀入幾個數字,對它們做一些處理,再把結果輸出。下面是一個這樣做的C++代碼例子:
- #include<iostream>
- #include<vector>
- #include<algorithm>
- using namespace std;
- int main()
- {
- vector<double> v;
- double d;
- while(cin>>d) v.push_back(d); // 讀入元素
- if (!cin.eof()) { // 檢查輸入是否出錯
- cerr << "format error\n";
- return 1; // 返回一個錯誤
- }
- cout << "read " << v.size() << " elements\n";
- reverse(v.begin(),v.end());
- cout << "elements in reverse order:\n";
- for (int i = 0; i<v.size(); ++i) cout << v[i] << '\n';
- return 0; // 成功返回
- }
對這段程序的觀察:這是一段標准的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”來表示輸入已經結束。