map[]的正確使用:自以爲是導致map的一個錯誤使用

今天自己寫的棒視圖模塊與系統聯調時出錯,花了我一個多小時,終於找出出錯原因:簡單的說就是沒有理解透map型的[]操作符的內在機理,代碼表現爲:

class A

{

BOOL RefrshBar(int nID);

map<int,structTstPntInfo*> m_map;//成員變量,structTstPntInfo是一個自定義結構

}

 

BOOL A::RefrshBar(int nID)

{

structTstPntInfo* stB = m_map[nID] ; 

...

}

將調用我這個模塊的人在刷新時指定了一個不存在的棒圖nID時,這個成員變量中就增加了一個對此nID的映射,

這樣導致其它信賴這個成員變量的成員函數就會出錯:m_map中多了邏輯上不存在的映射關係;

而我自以爲是此種寫法沒有向m_map中增加實例,僅當對m_map賦值時才向他內部增加一個實例即映射關係,

形如:structTstPntInfo  = stA; m_map[niD] = &stA; 事實上從map中取映射值時也會向map中增加實例;

總結:

1。對map的重載操作符[]而言,情況是不是這樣的:只要調用了這個重載符,則首先向內部找是否存在這個映

射,若無則增加一個實例。

2。我在工作以外(生活中)還有多少自以爲是的地方!!!若也有很多如此在自以爲是,真是恐怖!!!我在生活中又應該如何不要犯如此自以爲是的錯誤呢?這也是我現在想想就從牀上爬起來寫下這些的一個重要原因(現在是20070929凌晨5:36)

對於我這個總結我不能再犯自以爲是的錯誤,有兩點明天要查明:

1。[]是不是map的重載符;

2。是不是調用[]時,先查找映射關係,若不存在就產生一個實例;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章