原创 遊戲算法——Knuth重排

Knuth重排算法,又稱洗牌算法,費歇爾算法。是一種很簡單的洗牌算法,在遊戲工程中可能用到,在這裏整理一下。 C++實現: void ShuffleVector(vector<int>& numbers) { for (int

原创 基礎算法題——GCD歐幾里得最大公約數算法

歐幾里德算法,又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。 公式:gcd(a,b) = gcd(b,a mod b) 所以我們可以這麼做: 取大的數爲large,小的數爲small。 如果large%small == 0

原创 C++——自定義map的value默認值

考慮如下代碼: map<int,int> emptyMap{}; int i = emptyMap[100]; // i = 0 上述操作在C++種是合法的。雖然我們沒有給map插入一個key爲100的鍵值對,但是也將得到一個值

原创 基礎算法題——兩種遍歷方式可以唯一確定一棵二叉樹嗎?

按照數據結構課本上的說法: 前序遍歷+中序遍歷 後序遍歷+中序遍歷 可以唯一確定一棵二叉樹。 可是我有一點疑惑,考慮如下兩顆二叉樹:            1                      1       /         

原创 基礎語法——A&&B與B&&A有什麼區別?

一個栗子: for ( j=100; j>=0 && v[j]>key; j--) { ;//do something } 運行沒有問題。 但是假如我把這段代碼這麼寫: //注意&&前後的表達式調換了位置 for ( j=1

原创 編程陷阱——浮點數舍入

在《算法競賽入門經典(第二版)》(紫書)的第二章,最後有一道思考題: 下面的程序運行結果是什麼?提示:請上機實驗,不要憑主觀感覺回答。 #include<stdio.h> int main() { double i; for

原创 C++——將map作爲形參傳遞時,能使用常量引用嗎?

寫C++的時候有一個好習慣:寫函數的時候,如果確定自己在函數內不會對某個形參進行改變,則應將其聲明爲常量應用類型。 這是因爲引用類型的傳遞速度較快,只需要傳遞一個地址指針。如果不使用引用類型,則在調用函數的時候會使用拷貝函數將形參複製爲實

原创 我也認真上過課——《微機原理》學習筆記

彙編語言程序設計 這篇文章是一年之前學微機原理時寫的,現在改一下格式重發到CSDN博客上。主要內容是彙編語言。 1 彙編語言程序及其開發 源程序經過彙編成爲目標程序,再將目標程序連接成爲exe程序,最後進行執行和調試。 2 彙編語

原创 C++——“非常量引用的初始值必須爲左值”問題

參考:http://blog.sina.com.cn/s/blog_6d6f47690101dgwi.html 改正了原博文的某些疏漏。 一個栗子 看下面一個例子: int main(){ int i = 2;

原创 Unity3D——兩種獲得position對應座標系統的方法

1 通過inspector面板 通過inspector面板上獲得的transform屬性均屬於本地座標系。 注意:inspector面板上的rotation是歐拉角。 2.使用代碼得到 使用transform.position系列

原创 C++——new和delete之後發生了什麼?

衆所周知,如果我們使用new向系統申請了內存,我們應該使用指針指向這一塊內存,俾能我們使用結束後,通過delete該指針釋放此內存資源。 如果理解只達到這種程度,在內存管理稍微複雜一點時便一定會束手無策。總有一些事情比其他事情更基

原创 C++——cast強制類型轉換

以前學習的時候,使用的都是舊式版本的強制類型轉換,就是int(a)、a(int)這種。最近在看effective C++的時候注意到了新的cast強制類型轉換,在這裏整理一下。 一個命名的強制類型轉換具有如下形式: cast-n

原创 C++——使用仿函數實現map的降序排序

在頭文件xfunctional裏有兩個仿函數greater和less,是STL實現的用以升/降序的比較操作。 使map按關鍵字降序排列: map<int,int,greater<int>> mp; 但是如果map內的數據元素是自

原创 C++——unordered_set默認無法哈希vector?

有如下代碼: unordered_set<vector<int>> dict; 上述代碼在編譯時會報錯: 錯誤    C2338    The C++ Standard doesn't provide a hash for this

原创 基礎算法題——牛頓迭代法求近似平方根

方法描述: 首先隨便猜一個近似值x,然後迭代地令x=(x+a/x)/2,迭代個六七次後x的值就已經相當精確了。 代碼實現: int newtonSqrt(int x) { if (x == 0) return 0; double l