高級(jí)技術(shù)學(xué)者對(duì)C++代碼進(jìn)行編制
C++代碼擁有很多成熟的用于網(wǎng)絡(luò)通信的庫(kù),其中***有代表性的是跨平臺(tái)的、重量級(jí)的ACE庫(kù),該庫(kù)可以說是C++語(yǔ)言最重要的成果之一,下面就進(jìn)行學(xué)習(xí)研究,希望大家能夠得到自己想要的東西。
特別是在一個(gè)學(xué)期的開始,我常常收到許多關(guān)于編寫一個(gè)非常簡(jiǎn)單的程序的詢問。這個(gè)問題有一個(gè)很具代表性的解決方法,那就是(在你的程序中)讀入幾個(gè)數(shù)字,對(duì)它們做一些處理,再把結(jié)果輸出。下面是一個(gè)這樣做的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()) { // 檢查輸入是否出錯(cuò)
- cerr << "format error\n";
- return 1; // 返回一個(gè)錯(cuò)誤
- }
- 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; // 成功返回
- }
對(duì)這段程序的觀察:這是一段標(biāo)準(zhǔn)的ISO C++程序,使用了標(biāo)準(zhǔn)庫(kù)(standard library)。標(biāo)準(zhǔn)庫(kù)工具在命名空間std中聲明,封裝在沒有.h后綴的頭文件中。如果你要在Windows下編譯它,你需要將它編譯成一個(gè)“控制臺(tái)程序”(console application)。記得將源文件加上.cpp后綴,否則編譯器可能會(huì)以為它是一段C++代碼而不是C。
是的,main()函數(shù)返回一個(gè)int值。讀到一個(gè)標(biāo)準(zhǔn)的向量(vector)中,可以避免在隨意確定大小的緩沖中溢出的錯(cuò)誤。讀到一個(gè)數(shù)組(array)中,而不產(chǎn)生“簡(jiǎn)單錯(cuò)誤”(silly error),這已經(jīng)超出了一個(gè)新手的能力——如果你做到了,那你已經(jīng)不是一個(gè)新手了。如果你對(duì)此表示懷疑,我建議你閱讀我的文章“將標(biāo)準(zhǔn)C++代碼作為一種新的語(yǔ)言來學(xué)習(xí)”("Learning Standard C++ as a New Language"),你可以在本人著作列表(my publications list)中下載到它。
!cin.eof()是對(duì)流的格式的檢查。事實(shí)上,它檢查循環(huán)是否終結(jié)于發(fā)現(xiàn)一個(gè)end-of-file(如果不是這樣,那么意味著輸入沒有按照給定的格式)。更多的說明,請(qǐng)參見你的C++教科書中的“流狀態(tài)”(stream state)部分。vector知道它自己的大小,因此我不需要計(jì)算元素的數(shù)量。#t#
這段程序沒有包含顯式的內(nèi)存管理。Vector維護(hù)一個(gè)內(nèi)存中的棧,以存放它的元素。當(dāng)一個(gè)vector需要更多的內(nèi)存時(shí),它會(huì)分配一些;當(dāng)它不再生存時(shí),它會(huì)釋放內(nèi)存。于是,使用者不需要再關(guān)心vector中元素的內(nèi)存分配和釋放問題。
程序在遇到輸入一個(gè)“end-of-file”時(shí)結(jié)束。如果你在UNIX平臺(tái)下運(yùn)行它,“end-of-file”等于鍵盤上的Ctrl+D。如果你在Windows平臺(tái)下,那么由于一個(gè)BUG它無(wú)法辨別“end-of-file”字符,你可能傾向于使用下面這個(gè)稍稍復(fù)雜些的版本,它使用一個(gè)詞“end”來表示輸入已經(jīng)結(jié)束。