原创 查找 之 散列表查找(哈希表)

基礎概念 散列技術是在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關係f,使得每個關鍵字key對應一個存儲位置f(key).這裏對應關係f稱爲散列函數,又稱爲哈希(Hash)函數。 採用散列技術將記錄存儲在一塊連續的存儲空間中,這塊連

原创 VS環境中進行內存泄漏的檢測

根據MSDN中的介紹,親測整理。 本篇比較長,如不願花費太多時間,可只看第一段和第四段,甚至只看第四段。 內存泄漏,即未能正確釋放以前分配的內存,是 C/C++ 應用程序中最難以捉摸也最難以檢測到的 Bug 之一。藉助 Visual

原创 C++ 多重繼承

寫在之前: C++是支持多重繼承的,但一定要慎用,因爲很容易出現各種各樣的問題。 #include <iostream> using namespace std; class B1{ public: B1(){cout<<"

原创 C++ Primer 學習筆記(一)

書是第四版,人民郵電出版社出版的。感興趣的朋友可以一同交流下。希望能堅持下去! =================================================================== 命名空間: 在C++語

原创 使用jdb和gdb同時調試java native code

主要流程: 1.使用jdb啓動生成的java字節碼或jar包; 2.在java源碼中適當的位置設置斷點,如main方法; 3.使用run指令,使代碼跑起來。(jdb命令只是進入調試環境,jvm還沒有運行起來,當然我們的代碼也沒有運

原创 字典序法生成排列

/** 顧名思義,這種方法的思想就是將所有n元排列按“字典順序”排成隊, 以12…n爲第一個排列,排序的規則,也就是由一個排列(p)=(p1p2…pn) 直接生成下一個排列的算法可歸結爲 (1) 求滿足關係式P[k

原创 使用兩個隊列實現棧

廢話:要找工作了,面試方面得做些準備了,刷一刷題應該沒有壞處的,就從《劍指offer》開始吧。 第2.3.5節提到使用兩個棧實現隊列,相應的代碼也已給出。練習題裏有一道使用兩個隊列實現一個棧的題目,大體思路跟使用棧實現隊列差不多,書裏也給

原创 迭代器模式

定義 迭代器模式(Iterator Pattern)提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象內部細節。 迭代器模式通用類圖 Iterator抽象迭代器 抽象迭代器負責定義訪問和遍歷元素的接口,而且基本上是有固定的3個

原创 鄰位互換生成全排列算法

/** 本算法的思想也是希望以(12…n)作爲n個元素1,2,…,n的第一個排列, 然後按照某種方法,由一個排列(p)=(p1p2…pn)直接生成下一個排列, 直到全部排列生成完畢爲止。 以n=4爲例,開始在排列1234的各數

原创 狀態模式

定義 狀態模式(StatePattern)允許一個對象在其內部狀態改變時改變它的行爲。對象看起來似乎修改了它的類 狀態模式通用類圖 State——抽象狀態角色 接口或抽象類,負責對象狀態定義,並且封裝環境角色以實現狀態切換。 Conc

原创 享元模式

定義 享元模式(FlyweightPattern)運用共享技術有效地支持大量細粒度的對象。 享元模式通用類圖 Flyweight——抽象享元角色     就是一個產品的抽象類,同事定義出對象的外部狀態和內部狀態的接口或實現。 Conc

原创 單例模式

單例模式(SingletonPattern)是一個比較簡單的模式,其定義爲確保一個類只有一個實例,而且自行實例化並向整個系統提供這個示例。類的使用者一般都是通過構造函數來生成實例,如果將構造函數設爲私有成員,那麼類的使用者就不能隨便構造實

原创 橋樑模式

橋樑模式(BridgePattern)也叫做橋接模式,定義爲將抽象和實現解耦,使得兩者可以獨立地變化。 橋樑模式的重點是在“解耦”上。 橋樑模式通用類圖 Abstraction — 定義抽象類的接口。 — 維護一個指向Implemen

原创 動態鏈接

動態連接基本上分三步 啓動動態連接器本身 裝載所有需要的共享對象 重定位和初始化 動態連接器本身也是一個共享對象,但其不依賴於其他任何共享對象,其本身所需的全局和靜態變量的重定位工作由它本身完成。動態鏈接器必須在啓動時有一段非常精巧

原创 躁動不安的const

        就是用來嚇唬你的  我能想到的,最短的,且const最多的一個語句是:  int const * fun(int const*const a[],const int index)const;          而這個語