談一個技術上的原因。
學習算法需要分析算法的時間和空間複雜度。
JavaScript的標準ECMA-262[1]並沒有指明各種操作的複雜度,各個腳本引擎的實現可能會不一樣。
而C++本身較JS底層、透明,而且C++的標準庫也會指明各種操作的複雜度,例如upper_bound()是對數時間複雜度[2]、vector::push_back()是分攤常數時間複雜度[3]。
所以,使用JavaScript實現算法時,相比C++,可能較難分析算法的複雜度。
[1]
http://www. ecma-international.org/ publications/files/ECMA-ST/Ecma-262.pdf[2]
std::upper_bound[3]
std::vector::push_back---------------------------------
一些之前对
@winter的回应,复制于此:
每個語言都有底層,但C++比JS底層,我只是說C++比JS容易分析複雜度。
實際上,申請O(n)內存時某個操作系統申請了O(n^2)內存,這個可能性是存在的,只是我們一般能相信這個操作只會分配O(n)的內存。
即使有偽代碼,也難判定複雜度。例如對象可以用hash table或是sorted map實現,當中各個操作的時間複雜度就不一樣。
那個reference是按standard寫的,有些會說明C++11和之前的分別。例以在我的答案中提及list::size()在C++11規定要O(1),而C++03則不是。