今天爲了實現一個新功能,爲了不引發效率問題,決定把一個容器從std::list改爲stdext::hash_set。
這個類一開始不是我寫的,那個容器的聲明沒有用typede一個類型來,我接手以後,由於這個容器在代碼裏面要遍歷的點沒幾個,我也懶得重搆了,就一直沒有動它。
這次我就想順便改了,首先改聲明,從list改爲hash_set。然後編譯,準備從編譯錯誤裏面定位遍歷這幾個容器的點。
但是。。。。。居然編譯通過了。。。。一運行,也沒有任何問題……嗯?
後來看了看源代碼,才發現原來Microsoft的STL内部的hash_set居然是用list來實現的!
也就是說,hash_set的insert()、remove()、find()方法,效率不會太高……我特意看了看源代碼,果然如此……無語了……改天還是把hash_set換回set吧……這太不靠譜了……
結論就是,對於Windows API、第三方類庫之類的調用,千萬不要想當然,還是要看看實現(如果有的話),如果沒有的話,看相關文檔……
发表回复