诡异之--map clear 之后可能导致size != 0的操作

    map<char, int>mp;
    charMp[‘a‘] = 1;
    charMp[‘b‘] ++;
    cout<<charMp[‘a‘]<<endl;
    cout<<charMp.size()<<endl;
    charMp.clear();
    cout<<"after clear:"<<endl;
    cout<<charMp.size()<<endl;//0  //charMp.find(‘a‘);//find is ok !
    cout<<charMp[‘a‘]<<endl;//0:虽然不存在,但是访问过后map中就出现了‘a‘ -> 0: 神奇,这是STL中的bug?
    for(auto &r : charMp){
        cout<<r.first<<" , "<<r.second<<endl;//a , 0
    }
    cout<<charMp.size()<<endl;//1

结论就是:以后涉及到map.size()操作的话,必须要用Find,不要使用这种直接式的mp[‘c‘]的查询方式, 很危险。

时间: 2024-10-19 02:23:07

诡异之--map clear 之后可能导致size != 0的操作的相关文章

[Baidu Map]百度地图 JAVASCRIPT API V2.0 大众版 工具类

关键代码: /* *@description 百度地图 JAVASCRIPT API V2.0 大众版 工具类 *@author YanZhiwei *@see http://developer.baidu.com/map/reference/index.php *@email [email protected] */ (function () { map = {}; infoWindow = {}; BmapUtils = { CONSTANT: { DYNAMIC_CITY: "上海&quo

List集合返回null,判断选择isEmpty还是!=null又或者list.size()==0?

事故场景还原 最近在写一个项目的时候遇到一个这样一个问题,我简单的还原一下场景,这是模拟一个简单的管理系统 ① 一张简单的客户表 CREATE TABLE customer( id INT(11) NOT NULL AUTO_INCREMENT UNIQUE, NAME VARCHAR(255) NOT NULL, gender VARCHAR(255) NOT NULL, phonenumber VARCHAR(255) NOT NULL, balance DECIMAL(10,1) UNSI

nginx: [emerg] the size 10485760 of shared memory zone "cache_one" conflicts with already declared size 0

注意配置段中的区域包含关系.proxycachepatch 要在proxy_cache前已经定义. what seems to be the problem? [emerg]: the size 52428800 of shared memory zone "media" conflicts with already declared size 0 in /etc/nginx/conf.d/cache.conf:5 configuration file /etc/nginx/nginx

InnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytes

启动WAMP Server的时候报例如以下的错误: 140618 23:12:32 [Note] Plugin 'FEDERATED' is disabled. 140618 23:12:32 InnoDB: The InnoDB memory heap is disabled 140618 23:12:32 InnoDB: Mutexes and rw_locks use Windows interlocked functions 140618 23:12:32 InnoDB: Compres

集合框架null与size=0

被QA人员一眼指出来的问题,唉,好丢人 上栗子?? 如何判断一个集合是空? 运行后会输出什么? 显然第53行会报运行时错误:java.lang.NullPointerException 为什么呢? 首先分析第51行与第52行的区别: 51行:仅声明一个stringList1的引用 52行:在内存中开辟空间,并将内存地址赋值给stringList2 使用javap反编译java文件: 大概的意思很显然,第51行源代码就是0,1行,只是声明了一个变量并没有在内存开辟存储空间 怎么判空? 所以应该先判

报错: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

描述:使用Hibernate登陆验证时故意输入没有的用户名,所产生的错误. 错误代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /*      * 根据客户的用户名查找客户信息      */     @Override     public User getUserByUserName(String userName) {         String hql="from User where userName=?";         Session s

QTerro:Size mismatch for type ‘QPaintBufferCacheEntry’ [1024]. Previously registered size 0

QMetaType::registerType: Binary compatibility break - Size mismatch for type 'QPaintBufferCacheEntry' [1024]. Previously registered size 0, now regist 发现这个问题出现与连接时依赖opencv有关, 推测问题主要出在安装的opencv 与qt4 ,qt5间的关系构成的版本问题..应该是opencv lib编译时依赖了qt4.而我的工程需要依赖qt5

mariadb:InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes

mariadb 启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 起因:线上正在运行的系统,因为需要调整性能,变更了my.cnf参数的innodb_log_file_size大小,重启MySQL时err日志输出如下InnoDB: Error: log file ./ib_logfile0 is of different size 0 xxxx bytes 停掉mariadb 解决办法:移除原有ib_logfile#m

为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size&gt;0呢,岂不是多此一举吗?

List list=new ArrayList();1.如果是以上这样的话,lis不为null 但是size=0 这样集合对于之后的判断是没用的, 甚至是报异常,如list.get(0.......n)这样取值判断,就会报异常. 2.如果先判断size 再判断null 如:if(list.size>0){};这种情况如果list 等于null 时那么list.size会报空指针异常 所以要双重判断这样写最好if(list !=null && list.size>0){};