雜湊表有關的基礎知識(1)

2021-08-17 14:40:06 字數 2411 閱讀 3130

補充知識:

namespace的格式基本格式是

namespace exp

有點類似於類,但完全是兩種不同的型別。

為了在namespace外使用namespace內的變數我們使用::操作符,如下

exp::a

exp::b

使用namespace可以有效的避免重定義的問題

#include

using namespace std;

namespace first

namespace second

int main ()

結果是5

3.1416

兩個全域性變數都是名字都是var,但是他們不在同乙個namespace中所以沒有衝突。

關鍵字using可以幫助從namespace中引入名字到當前的宣告區域

#include

using namespace std;

namespace first

namespace second

int main ()

輸出是5

2.7183

103.1416

就如我們所指定的第乙個x是first::x,y是second.y

using也可以匯入整個的namespace

#include

using namespace std;

namespace first

namespace second

int main ()

輸出是5

103.1416

2.7183

正如我們所預見的匯入的整個的first的namespace,前一對x,y的值就是first中的x,y的值。

這裡我們不能在「using namespace first;「下加一句「using namespace second;「,為什麼呢?

這樣做無異於直接完全的忽視namespace first和namespace second,會出現重複定義的結果,所以前面的hello_world.c中的using指令的使用一定程度上存在問題的,只是因為我們就用了乙個namspace,一旦引入了新的namespace這種做法很可能會出現重複定義的問題

2.模板

下面定義了乙個名叫compare的函式模板,支援多種型別的通用比較邏輯。

template

int compare(const t& left, const t& right)

if (right < left)

return0;}

compare(1, 2); //使用模板函式

考慮我們寫乙個簡單的棧的類,這個棧可以支援int型別,long型別,string型別等等,不利用類模板,我們就要寫三個以上的stack類,其中**基本一樣,通過類模板,我們可以定義乙個簡單的棧模板,再根據需要例項化為int棧,long棧,string棧。

//

statck.h

template class stack ;

寫法2:

template 20

class

hashtable

2127

bool contains(const hashedobj &obj);

28bool insert(const hashedobj &obj);

29bool remove(const hashedobj &obj);

30private:31

32 std::vector> thelist; //

雜湊表33

int myhash(const hashedobj & obj) const; //

雜湊函式

34};

3.list

reserve

是容器預留空間,但並不真正建立元素物件,在建立物件之前,不能引用容器內的元素,因此當加入新的元素時,需要用

push_back()/insert()

函式。resize

是改變容器的大小,並且建立物件,因此,呼叫這個函式之後,就可以引用容器內的物件了,因此當加入新的元素時,用

operator

操作符,或者用迭代器來引用元素物件。

再者,兩個函式的形式是有區別的,

reserve

函式之後乙個引數,即需要預留的容器的空間;

resize

函式可以有兩個引數,

第乙個引數是容器新的大小,第二個引數是要加入容器中的新元素,如果這個引數被省略,那麼就呼叫元素物件的預設建構函式。

4.

std::string& strout的意思是宣告乙個string型別的引用,該引用變數名為strout

std是乙個命名空間,命名空間是防止名字衝突的乙個策略。

雜湊表基礎知識 2

在雜湊表基礎知識 1 中,我們介紹了分離鏈結法來解決雜湊衝突。它的乙個缺陷就是需要經常的分配動態記憶體,這是比較花費時間的。本文再介紹解決雜湊表的另外一種方法開放定址法。不需要動態多次的動態分配記憶體。開放定址法是運用乙個陣列,所有的資料都需要放入這個陣列中,如果發生雜湊衝突,我們通過乙個函式 f ...

HLSL有關的基礎知識

主要是最近在學習xna中有關一些效果的東西,發現了官網上的2d的一些fx效果相當好。其 給出如下鏈結 然後就查了一下hlsl這個範例裡面的fx還都不算太難,可以理解。乙個簡單的hlsl程式,返回乙個材質的各點的顏色。sampler s0 register s0 float4 main float2 ...

字元雜湊基礎知識

定義 字串雜湊,最著名的就是bkdrhash,也就是將字串變成數值,並且最後變成的數值是乙個p進製的數,一般來說p最好為素數.p常見的是131和13331,這是兩個經驗值,出錯率極低。str i 字元陣列 h i 存str 1.i 的雜湊值 p i 存base的i次冪的值 如果h i 和p i 取u...