C++随笔
筆者于今年(研一上學期)利用零零散散的時間系統的學習了C++語言。其實以前也曾不夠系統的學過C++,但想著工作以后開發語言應該就是用C++了,于是就把C++的系統學習放在了日程表中。于是《C++ primer plus》就成了晚上的催眠讀物。最近放寒假了,趁著假期時間寫一寫對這本書和這門語言的感受吧.
首先說一下這本書,這本書的優點應該在于它非常細致地介紹了C++每種功能的來源,你會明白語言的設計者為什么要這樣設計。而缺點就在于這本書是個大部頭,整本書的內容實在太多、太雜,從頭到尾看極容易讓人生厭,當做工具書又很難找到想要找的內容。因此,本書適合的讀者不是那些想要快速入門的人,而應該是像我這樣希望系統學習C++并且不缺時間的人(因為本人離找工作還有一年半的時間,時間上比較充裕)。
然后再談談C++這門語言吧,之所以選擇C++作為工程語言是因為在移動機器人和SLAM領域開發的語言基本上都是用C++來寫的。系統學習大概也有半年了,沒想到談論到C++的時候仍然感覺這家伙如淵如海,目前接觸到的C++也僅僅只是其面向對象和模板的那部分。就在今天,偶然機會下看到LeetCode,突然就發現了C++的新大陸,原來關于STL(標準模板庫)的部分我好多都還不清楚,這部分又是C++除面向對象外的又一精華。容器、迭代器及算法類這種在我看來是一種程序設計中的優化算法,使用得當能夠極大的降低算法的時間、空間復雜度,同時,容器、迭代器在某種程度上也是為提升了代碼的可重用性,使程序員從繁雜的底層算法實現中脫離出來。
本文的主要目的是寫清楚C++特性的由來,而不在具體的代碼上糾結。
首先談一談類的設計,類是數據與操作的集合。原本在C語言中就有基本數據類型,它們可以進行各種諸如加減乘除操作。通過類這種概念的引入,就擴展了基本數據類型,再對類定義相關操作,就可以像操作基本數據類型一樣來操作類了。為了完成數據的封裝,設計者將類的數據、函數類型分為私有類型和公有類型,控制了數據和函數的訪問權限。而后又通過重載運算符讓程序員可以很自然的使用類,比如將兩個string類相加不用書寫string3 = string1.add(string2) 而直接寫 string3 = string1 + string2。類可以被繼承,也可以被擁有。
而后便是模板,通過引入模板,類代碼的可重用性就進一步的得到了提升。比如一個鏈表類,其基本的數據類型可以是int,也可以是string,只要這種數據類型提供了比較功能即可,這種模板的重用在容器類中得到了最大的體現。
以上的內容是我在實驗室中編程經常會用到的內容,而關于容器類和算法我暫時了解的不多,如有錯誤,歡迎指正一二。容器為了完成復雜數據結構的抽象,容器類就是一種包含了簡單數據結構的復雜數據結構,這里的復雜數據結構是指列表、有向圖、紅黑樹等等,而簡單數據結構可以是基本數據類型,也可以是自定義數據類型。比如 vector<student>完成的就是以student為基本數據類型的列表類型。通過容器類,我們可以很容易地實現諸如鏈表、棧、隊列等的數據結構及算法。而算法是在容器上的抽象,通過在容器類中引入迭代器的概念,算法可以進針對某些容器的迭代器來操作。對于特定的一些容器類,可以使用同樣的算法來進行操作,這部分在C++中被稱為泛型編程。
參考資料:
[1]關于C++的扯淡
轉載于:https://www.cnblogs.com/hustyan/p/10327965.html
總結
- 上一篇: 第十一章 网络编程
- 下一篇: 一套简约漂亮的响应式博客园主题皮肤分享给