原创 模式十一:組合模式(Composite Pattern)——整體與部分一致化

組合模式允許你將對象組合成樹形結構來表現“整體/部分”層次結構。組合能讓客戶以一致的方式處理個別對象以及對象組合。應用分析組合模式讓我們能用樹形方式創建對象的結構,樹裏面包含了組合以及個別的對象。 使用組合結構,我們能把相同的操作應用在組

原创 模式十二:狀態模式(State Pattern)——狀態對象切換來改變狀態

狀態模式允許對象在內部狀態改變時改變它的行爲,對象看起來好像修改了它的類。應用分析狀態模式將狀態封裝成獨立的類,並將動作委託到代表當前狀態的對象。 從客戶的視角來看,如果使用的對象能夠完全改變它的行爲,那麼就會覺得這個對象實際上是從別的類

原创 模式六:命令模式(Command Pattern)——封裝請求對象

命令模式 將“請求”封裝成對象,以便使用不同的請求、隊列或者日誌來參數化其他對象。命令模式也支持可撤銷的操作。 應用分析 命令模式的設計,定義公共的Command接口,使請求調用者和請求接收者之間解耦,便於請求擴展。 Command:定義

原创 模式三:裝飾者模式(Decorator Pattern)——對象的功能擴展

裝飾者模式 動態地將責任附加到對象上。若要擴展功能,裝飾者提供比繼承更有彈性的替代方案。 應用分析——對象的功能擴展 對象的功能擴展,最簡單的方式就是繼承,但是幾種不同的功能有不同的組合時,將會產生許許多多的類,這樣不利於管理

原创 模式十:迭代器模式(Iterator Pattern)——順序訪問聚合對象元素

迭代器模式 提供一種方法順序訪問一個聚合對象中的元素,而不暴露其內部的表示。 應用分析 迭代器模式讓我們能遊走於聚合內的每一個元素,而不暴露其內部的表示。 把遊走的任務放在迭代器上,而不是聚合上。這樣簡化了聚合的接口和實現,讓責任各得其所

原创 模式八:外觀模式(Facade Pattern)——簡化接口

外觀模式 提供了一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。 應用分析 外觀沒有“封裝”子系統的類,外觀只提供簡化的接口。所以客戶如果覺得有必要,仍可以直接使用子系統的類。 外觀只是讓子系統更方

原创 內存對齊規則以及作用

首先由一個程序引入話題:  1 //環境:vc6 + windows sp2 2 //程序1 3 #include <iostream> 4  5 using namespace std; 6  7 struct st1  8 { 9 

原创 字符串匹配算法---Brute force、KMP、Sunday

字符串匹配---輸入原字符串(String)和子串(又稱模式),輸出爲子串在原字符串中的首次出現的位置。在這兒,我們介紹用於字符串匹配的Brute force、KMP和Sunday方法。 1.Brute force 該方法又稱暴力搜

原创 用兩個隊列實現棧&用兩個棧實現隊列

棧和隊列的相互實現一直是面試中常考的問題。下面是它們的相互實現代碼,以方便大家學習交流。 用兩個隊列實現棧/*兩個隊列實現棧*/ #include <iostream> #include <queue> using namespac

原创 求字符串中的迴文最大長度

目前,此問題最好的解法是Manacher算法,時間複雜度爲O(n),本文還給出了另外兩種便於理解的方法。 1.Manacher算法 //Manacher's ALGORITHM: O(n)時間求字符串的最長迴文子串 #include

原创 判斷一個數組中沒有出現的最小正數

下面介紹一種判斷一個數組中沒有出現的最小正數的方法,要保證效率: 時間複雜度O(n) 空間複雜度O(1) 方法思路:使用數組下標,通過交換,保證數組下標爲i的元素值爲i+1,即arr[i]=i+1,然後從前往後,不滿足此條

原创 模式七:適配器模式(Adapter pattern)——接口轉換

適配器模式 將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。 應用分析 主要功能是完成接口轉換,通過適配器,將被適配者的接口轉換成滿足客戶需求的接口。 客戶使用適配器的過程如下: 客戶通過目標接口調用適

原创 算法分析及實例解析(二)——貪心算法、動態規劃

貪心算法(greedy algorithm) 貪心算法,顧名思義。其算法描述爲:在分步決策問題中,每一步選擇當前最優。由於貪心算法僅考慮局部最優性,所以不能保證整體最優。因此,對於貪心算法,必須進一步證明該算法的每一步做出的選擇都必然導致

原创 模式一:策略模式(Strategy Pattern)——實現可替換算法

策略模式 定義算法族,分別封裝起來,讓它們之間可以相互替換,此模式讓算法的變化獨立於使用算法的客戶。 應用分析——變化部分的實現 一種類型經常變化的部分,如果放在基類裏面,變化的子類需要重新實現,不利於代碼重用; 如果定義在抽象

原创 模式二:觀察者模式(Observer Pattern)——實現一對多關係

觀察者模式 定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。 應用分析——一對多對應關係實現 當多個觀察者對象需要依賴一個主題對象的狀態而動態變化時,使用觀察者模式,當主題狀態