C 函式對映使用講解

2021-06-17 16:41:57 字數 2070 閱讀 8334

想想我們在遇到多語句分支時是不是首先想到的是 switc case 和 if else if ...

這2種方式在編碼方面確實簡單少,但是當分支達到一定數量後,特別是分支內部有巢狀大段**或者再巢狀分支,

**會顯得異常臃腫,十分難以維護,對於if else if 語句過多的分支帶來過多的判定句,勢必會影響效率。

3種替代方法簡述:

1.使用map,需要構建樹和節點,比陣列的方式消耗更多的記憶體,查詢時間複雜度為log(n),但擴充套件起來方便。

2.使用陣列,查詢直接索引定位, 一般來講我們是連續的初始化陣列,也就意味索引(type_func)到函式的對映要連續,

所以使用陣列索引在擴充套件上來講:例如增刪元素是稍微麻煩點的。

3.使用c++的特性---抽象繼承來實現,本文只講前2種的使用,這種方式以後再補充。

我比較喜歡用**結合實際來講解,下面我將以一段事例**來講解如何使用這幾種對映:

// 動物會一些動作

enum type_func

;class canimal

// 需要對映函式的返回值 和 引數必須 統一

int eat (bool= true)

int sleep (bool= true)

int walk (bool= true)

int run (bool= true)

int smile (bool= true)

int cry (bool= true)

int jump (bool= true)

// 初始化

void init ()

// 一般做法是switc case 或者 if else...

// 其實這裡看起來還不算糟糕,一方面這裡我把每個模組內容都封裝到相應函式了

// 分支內部才會看起來相對簡潔,實際編碼中可能就不是你現在所看到的方式。

void process (type_func type) }

// 很熟悉的感覺吧! :)

void process2(type_func type)

else if (type_sleep == type)

else if (type_walk == type)

else if (type_run == type)

else if (type_smile == type)

else if (type_cry == type)

else if (type_jump == type)

}// 使用map 對映

void processbyusemap(int key, bool val) }

// 使用陣列 對映

void processbyusearray(int key, bool val) }

// 使用map 對映

int operator (int key)

return null;

} // 使用陣列 對映

int operator() (int key,bool val)

return null;

}};mapcanimal::s_map;

canimal::ptr_func canimal::s_array[type_max_size];

//// 非成員函式

void func_eat(int = 0)

void func_run(int = 0)

void func_walk(int =0)

void func_cry(int = 0)

typedef void (*ptrfun)(int);

mapg_map;

ptrfun g_array[type_max_size];

int _tmain(int argc, _tchar* argv)

Elasticsearch對映使用講解

索引中每個文件都有乙個型別 type 每個型別擁有自己的對映 mapping 或者模式定義 schema definition 乙個對映定義了字段型別,每個欄位的資料型別,以及欄位被elasticsearch處理的方式。對映還用於設定關聯到型別上的元資料。核心簡單字段型別 elasticsearch...

對映型別講解

1 對映型別中的字典 python中通過名稱訪問各個值的資料結構稱為對映 字典是python唯一的內建對映型別 key value 其中key可以是數字 字串或元組。1.1 字典的定義 建立字典 data 使用dict建立字典 xval xname john xage 38 xdata dict x...

C 建構函式講解

建構函式的種類 如果建立乙個類沒寫建構函式,則系統會自動生成乙個預設建構函式,該建構函式沒有引數,函式為空,什麼都不做。只要寫了如下某乙個建構函式,則系統不會生成預設建構函式 1.無參建構函式 a 2.一般建構函式 a int v1,int v2 3.複製建構函式 a const a a 若沒有顯式...