低階 array 與高階 vector 的取捨 (Was: Re: [ …
原po gr網友在這裡問過三四次問題,全都沒有善用標題,
不是寫個「新手問題」,就是只有「[問題]」。
建議他以後要在標題中明確而扼要的點出問題的內容。
這是基本的網路禮儀,也是一種良好的思考訓練。
由於以下所寫,已經和原來的問題漸行漸遠,所以我
另立一個標題。
※ 引述《gocpp (cpp)》之銘言:
: 看情況啦。array 還是必要的,否則早就丟掉的。
: 以我的經驗來說,除非是寫短短的測試程式,或有極端效能的要求,
: 一般是很少使用 array,更常用的是 vector。
: array 的確有很多不安全的地方,但我常使用 vector 的更重要理由
: 倒不是因為 array 不安全,而是我覺得它不太方便。
[中略]
: 當然,這些都是取巧的小手段,不值一哂。不過若以比較高階的觀點來
: 看,直接操作 array 還是相當低階的動作,需要比較多的專注力,雖然
: 不能忽略這種精確的訓練,但大多時候,我希望 C++ 的編程風格,除了
: 講求 C 的精確和高效之外,也能像 Basic 一樣「簡單」。基於這個原
: 則,在 C++ 中我的確是傾向少用 array 的。如果寫 C 的話,就只好乖
: 一點,有什麼就用什麼。
array 與 vector 的取捨,有一點重要考量,就是元素個數
是否會在程式執行過程中變來變去。會變的話,通常都應該
捨 array 而取 vector。 C 時代,透過 malloc()/realloc()
來操作動態 array 的煩瑣而易出錯的做法,到了標準的 C++
時代,就該用會自動幫我們搞定的 vector 來取代了。
至於若元素個數固定不變的話,若是想要趕快寫出一個正確
而可用的 C++ 程式,也是可以用 vector。我寫 ACM 題目的
淺薄經驗,一開始常常用 vector 寫,往往很快就可寫出一
個被接受的程式。可是當我一看到執行所耗費的時間,和別
人的速度一比,馬上 Orz... 於是又改用原始的 array 來做,
接著都會多花上許多時間來除錯,最後才弄得出一個正確而
跑得比較快的程式來。直接操作 array 真的是太低階而易出錯。
這也是為什麼一些 C++ 大老會勸人:若是本來的目標就是 C++
的人,直接學 C++ 就對了,而不要先學 C,再來學 C++ 的部份
原因。而且也在 C++ 教學書很前面的地方,就開始適量的引進
C++ standard library 來讓學習者使用,以避免低階操作的種種
困擾。
: 在 C99 中,array 在初始化時,已經可以使用變量來初始它的規模,這使
: 得 array 的使用更加便利。
: 不過 C++ 並不支援這種功能,因為 C++ Standard 已經有 vector 等容器
: 了,可以不需要類似 C99 的 array。
就 C++ 來講,當然有了強大的 vector,就不會想在核心語言層次
對 array 動手腳了。然而,就 C 的立場,新增這種執行時期才決
定元素個數的 array 很可能的確有必要。Stroustrup 曾感慨說,
「C 標準」的增修未能和 C++ 密切配合,導致 C99 和 C++ 更難
相容了。他甚至希望有朝一日,C 和 C++ 能夠合一。我無知的想法
是覺得這個不太可能啦。C++ 真的太複雜,要宣稱 Our compiler
is C++ standard-comformant 有多難呀!隨便一個硬體平台,要
有個 C compiler,相形之下,容易得太多了。一旦 C 和 C++ 合一,
到時還不是又要搞個 C++ subset 出來,讓一大堆 embedded system
來用。其實目前就有這種東西,只是很亂。C 和 C++ 合一,恐怕
會更亂吧 :-)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: khoguan 來自: 220.130.208.168 (08/10 15:24)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30