低階 array 與高階 vector 的取捨 (Was: Re: [ …

看板C_and_CPP (C/C++)作者 (Khoguan Phuann)時間19年前 (2005/08/10 14:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
原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)
文章代碼(AID): #12-PwQqs (C_and_CPP)
文章代碼(AID): #12-PwQqs (C_and_CPP)