發表文章

目前顯示的是 4月, 2018的文章

(C++) 別再用dynamic array與pointer了! 趕快學STL的vector與iterator!

圖片
(一) 廢話 別再用array與pointer?那我不是在自打上一篇的嘴巴嗎? 其實並不衝突。因為在C之下,pointer還是非常重要的,本篇所著重的是C++。 不知道大家在學C++時,老師或書中有沒有教或學到STL(Standard Template Library)呢? STL是C++下非常非常好用的函式庫,他提供了非常多Template形式的"容器",讓開發上省去不少麻煩,且使得C++與C之間相去越遠,兩者已經儼然是不同的語言了!(Jserv 大師也曾說過 - 自 1999 年制訂的 C99 規格開始,C 語言和 C++ 程式語言就分道揚鑣,換言之「C++ 是 C 語言的超集 (super-set)」不再成立。) (二)前言 C++之父-Bjarne Stroustrup曾說過, "you should use vector over Array unless you have a really good reason to use an array"。因為記憶體的管理永遠是開發者的痛,在現今的程式開發中最好能避免使用new,因為這會使我們必須持續的追蹤其大小且須手動刪除釋放。尤其是在re-size array時,vector會更加好用。 當然不諱言的是,dynamic array的速度還是優於vector的,只是那是只在極端講求速度的class 的內部實作中才使用。 (三) Vector與Iterator是何物? Vector 是 C++中STL容器(container)中其中一個 template class,他在宣告後就可以使用。只需要一直進行新增資料,而不用在乎其大小,亦可視為會 自動擴展容量(capacity) 的陣列,所以只要一直塞一直塞一直塞就可以了XD。是C++標準程式庫中的眾多容器(container)之一。 Iterator有時又稱cursor,是一種在很多程式語言中都有的interface,主要功能就是讓工程師可以無需關心memory分配而在各種container中進行尋訪。C++雖然本身不具此功能,但在STL中對於此進行了實作。會 綁定所指向的容器 。因此Iterator可以 視為容器(在這就是用於vector)的指標的概念,因此亦可以直接做