20170729-學習日記
【本文會在今天不斷補充,如果想看完整版的朋友請在明天閱讀(^_^)】
(13:40):看了上海教育電視台出品的《我們需要化學》系列紀錄片(視頻鏈接),製作十分精良,內容也頗為有趣。美中不足是時間太少了。。。不過如果對化學感興趣的同學可以看看BBC出品的化學紀錄片:BBC化學史。對化學在人類社會中的作用,現代人了解的太少了。這也是為啥會有廣告詞說「我們恨化學」。。。。(好像是國產的一個化妝品品牌。多和人家科顏氏學學去。每次路過科顏氏的專櫃都會感覺到化學的魅力。)
(16:55):剛剛看了Youtube上的一個視頻:教你在1小時之內學會C++。看完之後,發現其實它講的都是最基礎的東西(是一些所有語言都基本一樣的。。。)。而我個人認為學習一門編程語言最重要的不是這些最基本的東西(因為它們都可以在cheatsheet上找到)。而是每個語言最獨特的地方。C++最獨特的地方就我看來可能就是它的STL庫(原來參加競賽的時候也聽說過用C++的選手不讓用STL庫,可見其中的各種函數可以幫助我們節省不少時間。)那麼下面就簡單的總結以下視頻中講的東西,同時也列一個框架,可以幫助大家更好的掌握編程語言。
首先先介紹以下C++程序的結構:
#include <iostream> // 標準輸入/輸出n#include <vector> // 向量數據結構n#include <string> // 字元串結構n#include <fstream> // 文件輸入/輸出n// 還可以加入其他許多的庫,使用#include語句nn// 函數、過程定義nnint main()n{n // some statementsn return 0 // 如果程序完成良好,就從這裡退出n}n
- 變數類型、運算符
在C++中常用的變數類型有這些:
int, float, double, char, bool,
string (字元串變數【類】,比C方便多了。在C當中字元串是一個字元char的數組),
還有一些不太常用的:
short int, long int, long long int等等
- 布爾運算、條件選擇
布爾表達式中的運算符:==, !=, >, <, >=, <=
布爾變數的類型為bool。值有兩個:true / false。布爾運算有三種:與(&&)、或(||)、非(!)
在C++中的條件選擇有兩種:(1)If ... else ... (2)switch。下面分別介紹它們的用法。
If ... else ... : (注意,在C++當中//表示注釋;同樣段注釋可以寫成/* ... */)
If (condition) {n // do somethingn}nelse if (condition) {n // do other thingsn}nelse {n // n}n
switch的用法:
switch(variable){n case_1 : // some statements; break;n case_2 : // some statements; break;n default : // some statements;n}n
還有一種比較簡單的寫法:(如果condition為真則運行?後的,為假則運行:後的)
variable = (condition)?(true):(false)n
- 循環【for,while,do ... while】
For循環的用法:
for(int i = 0; i < 10; i++){ // do something }n
While循環的用法:
while (condition is true){ // do something }n
do-while循環的用法:
do { // do something } while (condition is true)n
- 數組、字元串、向量
在C++中定義數組(Array)是非常簡單的事情:
一維數組:
int numbers[5];n
二維數組:
int numbers[5][5];n
當然要記住的一點是所有數組的index都是從0開始的。
字元串的定義很簡單:
string strVariable;n
但是有關字元串的操作卻有很多。而且在C++當中,字元串(string)其實是一個class,而字元串變數其實是一個對象(object)。因此在C++中,有關字元串的許多操作都是用以下形式來用的:
strVariable.method_name(parameters);n
在視頻中講到的操作有如下幾種:
strVariable.empty() // 判斷字元串是否為空nstrVariable.append(str) // 將str字元串添加到strVariable的尾部nstrVariable.insert(index, str) // 將str添加到index的位置上nstrVariable.replace(index, str) // 將str從index處開始覆蓋nstrVariable.assign() // 這個函數的用處暫時我還不是很了解。。。nstrVariable.compare(str) // 判斷str是否和strVariable是一樣的n
向量【Vector】在C++中的用途是當我們並不知道數組中將會有多少元素時使用的。它可以認為是變長度的數組。有關vector的定義如下:
vector <var_type> vec[initial_number];nvector <int> vec[10];n
向量和字元串一樣,它們都是object,因此有關向量的運算也有很多:
vec.push_back(var) // 在vector最後加入一個變數var,vector的長度變長nvec.pop_back() // 刪除vector中的最後一個變數n
- 函數操作
在C++中的函數定義如下:
return_type func_name(parameters){n // some statementsn return epr;n}n
在這裡return_type可以是void(也就是無類型)。
當然我們還可以在函數定義時出現遞歸定義:
int factor(int n){n if (n=1) return 1;n sum = n * factor(n-1);n return sum;n}n
遞歸定義需要滿足兩點:(1)有終止點:例如在這裡就是當n = 1的時候(2)有遞歸過程:在這裡就是sum的表達式,每次計算都使得factor(n)變成了factor(n-1)。
- 文件操作(讀與寫)
在C++中讀文件和寫文件所使用的庫名是<fstream>。其調用方式為:
#include <fstream>n
在一開始我們也講到了。
那麼如果我們想讀文件,假設文件名是file1.txt。那麼我們可以這麼來寫:
ifstream reader("file1.txt");nfor (int i=0; !reader.eof(); i++)n{n reader[i]n}nreader.close(); // 關閉stream入口n
如果我們想輸出文件到file2.txt中,寫法為:
ofstream writer("file2.txt");nwriter << "Hello world" << endl;nwriter.close()n
- 面向對象程序設計(OOP):類與對象的定義
關於OOP,類的定義和對象的實例化都是很重要的。我們先講對象的實例化:
假設我們有一個類class1,那麼這個類的一個對象object1可以被聲明為:
class1 object1n
當然我們的class中會有attributes(參數)與capabilities(函數),那麼一個比較general的類定義可以被寫為:
class class_name : public father_class_name {n private:n data_type attr1;n data_type attr2;n public:n getattr1();n getattr2();n setattr1(vars);n setattr2(vars);n // other functionsn};n
其中private的意思是這些attribute只能通過類當中的函數進行調用和修改,如果我們想要知道一個對象obj1中的參數attr1,那麼必須使用:
obj1.getattr1()n
而不能直接使用obj1.attr1。這就是private的作用。
那麼這個視頻目前就整理到這裡。在以後可能還會加入更多有關C++的東西。
除了C++之外。個人認為想成為一個程序員,其他語言也是必不可少的。畢竟不同的語言在不同領域的重要性不同。要針對具體問題選擇最好的語言,這也是程序員的基本素質嘛。
個人認為這些語言對我來說比較有趣:
C, C++, Java, Python, Perl, Fortran, Julia (科學計算), JavaScript, PHP, R, Swift
對這些語言在Youtube上都有非常好的資源。在國內網站應該也能找到不少。在以後的學習日記中將會不斷的總結我對編程語言的最新學習成果。
【今天晚上要去看戰狼2(感覺好像看的有點晚了。。。)】
推薦閱讀:
※如何評價特斯拉在科學史上的地位?
※神秘博士聖誕特輯的一次腦洞展開
※怎樣在囚徒博弈中控制對手?(知乎 Live)
※基對 一方科幻No.1mDay
※單個電荷運動產生的磁場問題?