最近在學習c++ STL方面的知識,複習《STL源碼剖析》的時候,想簡單的練習一下里面的使用實例,使用的編譯環境是比較輕巧的c-free 5.0。
前面序列容器部分沒有什麼問題,在測試hashtable的時候卡住了。hashtable在客戶端程序實現時在頭文件<hash_set.h>中。
#include <hash_set>
首先,編譯器會提示:No such file........。找不到頭文件。
打開c-free安裝路徑,查找一下,發現文件在ext目錄下。添加一個路徑就可以了。
點擊“構建”-----》構建選項---》路徑--》添加
接下來,在聲明使用hashtable時,不出意外的話,還會有一個錯誤:
[Error] C:\Users\user\Documents\C-Free\Temp\xxx.cpp:7: error: `hashtable' was not declared in this scope
打開hash_set頭文件,可以發現命名空間不是std,而是__gnu_cxx。
使用using namespace引入一下就可以解決這個問題。
如果你像我一樣,想把書上的源碼敲一遍,會發現不少有出入的地方。原書代碼不贅述了,簡單示例一下修改後可運行的代碼,細節部分建議自行瀏覽hash_set頭文件。
#include <hash_set>
#include <iostream>
using namespace __gnu_cxx;
using namespace std;
int main()
{
hashtable<int,
<span style="white-space:pre"> </span> int,
hash<int>,
_Identity<int>,
equal_to<int>,
allocator<int> >
iht(50,hash<int>(),equal_to<int>());
cout<<iht.size()<<endl;
return 0;
}
最後:強烈推薦一下《stl源碼剖析》結合《effective stl》一起看。