关闭

map[]的正确使用:自以为是导致map的一个错误使用

758人阅读 评论(0) 收藏 举报

今天自己写的棒视图模块与系统联调时出错,花了我一个多小时,终于找出出错原因:简单的说就是没有理解透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。是不是调用[]时,先查找映射关系,若不存在就产生一个实例;

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:48654次
    • 积分:824
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:5篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论