原创 關於移位的有意思的小問題

首先,直接上題目: 根據X得到F和G,其中X、F、G均是有符號的32位整型數,其中F = X/2; G = X>>1; 發現 F != G,下面的說法哪個是正確的: A  編譯錯誤   B  X是奇數  C X是負數  D F-G=1

原创 快速排序 歸併排序的非遞歸版本 備忘

首先,歸併排序,分治,遞歸解決小的範圍,再合併兩個有序的小範圍數組,便得到整個有序的數組。 這是很適合用遞歸來寫的,至於非遞歸,便是從小到大,各個擊破,從而使得整個數組有序。代碼如下: void merge(vector<int> &A

原创 C++函數調用之靜態成員函數

首先,定義如下類A: class A { private: static int val_s; public: static int getVal(){cout << "call getVal in A..." << e

原创 算法之 數組的“距離”

Description: 給定數組A[0---n-1],找出數組中的max(j - i),其中 i< j && A[i] < A[j].這裏的最大的(j-i)的值就是數組的“距離”。 方法一:直接枚舉,O(n^2). 方法二:伴隨數組 +

原创 項目中的有趣題目 -- 喫餃子問題

題目描述: 近日,項目中偶遇一個有趣的題目,感慨多多,備忘之。抽象出來,大致是: 桌上一共有100個餃子,其中有10個餃子包了硬幣,問:連續喫到硬幣的期望次數是多少次? 首先,定義一下這裏的連續,如果我們將喫餃子的順序抽象爲一個100位的

原创 C++ 之 over-eager evaluation 超前評估

C++之超急評估 over-eager evaluation vs.eager evaluation vs. lazy evaluation 在前面已經提到了C++地懶惰求值:不要爲你程序功能之外的任何事情付出任何代價。在你總是

原创 STL 之 iterator traits 備忘

//5種迭代器,爲了激活重載機制,定義的5個類型。每種迭代器就是一個類型。 struct input_iterator_tag{}; struct output_iterator_tag{}; struct forward_iterato

原创 [算法]區間重合判斷

題目描述: 給定一個源區間 [x,y]和N個無序的目標區間[x1,y1],[x2,y2],...[xn,y,],判斷給定的源區間[x,y]在不在目標區間內。 例如:給定源區間[1 6]和目標區間[1 2][2 4][4 9]即可認爲區

原创 C++之 虛函數的訪問控制 以及 編譯器的綁定策略

[updated] 注意:基類的指針不能調用派生類自己定義的函數,只能調用虛函數!!!!因爲函數的綁定是靜態的,實際調用的函數纔是動態的。 如下面的代碼: //基類的指針不可以調用派生類自身定義的函數(不是虛函數) #include

原创 最長迴文子串的不同解法

給定一個字符串,返回該字符串的最長迴文子串,迴文也就是說 ,正着讀和反着讀是一樣的。下面總結了幾種求迴文的方式: 方法1 : 很簡單,枚舉所有的區間 [i,j] ,查看該範圍內是否是一個迴文.   時間複雜度 O(n^3),空間複雜度 O

原创 【提高C++性能的編程技術】讀書筆記1 -- 導言

【紙上得來終覺淺】 最近開始看這本書,站在巨人的肩膀上,希望有更大的收穫!! 一個程序的執行效率是取決於改程序翻譯成彙編語言之後的執行的機器指令的條數。而每一個機器指令的執行的週期是一定的。C語言和C++都是高於彙編語言的高級語言,其

原创 [數據結構]棧的插入,歸併以及快速排序

棧的排序算法: 第一種,類似於插入排序,(允許額外利用一個棧),每一步的循環不變式是temp中的元素是有序的。直接上代碼: void sortStack(stack& s) { if(s.empty()) return;

原创 C++11之 unique_ptr

原文地址爲:http://www.drdobbs.com/cpp/c11-uniqueptr/240002708 在C++11中加入了很多的新特性,unique_ptr一枝獨秀,對於動態分配的內存對象,它簡單有效。雖然它不是萬能的,但是它

原创 沒有默認構造函數,如何定義對象數組

如果一個類沒有定義默認構造函數,那麼構造該類的對象數組將會是一個問題。於是實現了一個將new操作符掰開了來用的代碼。首先分配內存,然後再在分配的內存上調用構造函數構造對象,下面的代碼做一個簡單的備忘。 //沒有定義構造函數的類不能定義該類

原创 C++之類的成員函數的調用 vs. 普通函數的調用

首先請看下面的語句: Point3d obj; Point3d *ptr = &obj; 當使用上述指針或者對象調用成員函數Func()時,會有: obj.Func(); ptr->Func(); 上述調用的背後到底完成了一些什麼