精华内容
下载资源
问答
  • Java在循环中删除Map中的元素

    千次阅读 2018-09-04 09:57:19
    private static void clearYesterdayCachMap(){ ...Map.Entry<String, List<Object>>> it = cachMap.entrySet().iterator();  while(it.hasNext()){  Map.En...

        private static void clearYesterdayCachMap(){
            Iterator<Map.Entry<String, List<Object>>> it = cachMap.entrySet().iterator();
            while(it.hasNext()){
                Map.Entry<String, List<Object>> entry = it.next();
                if(entry.getKey().startsWith(getTodayStr(-1))){
                    it.remove();//使用迭代器的remove()方法删除元素
                }
            }
        }

    展开全文
  • C++:迭代中删除map的成员  首先要清楚一点,迭代器相当于是容器上的指针,容器可以自己管理内 存,因此迭代器可能失效。 如果你不知情的情况下使用了失效的迭代器,后果是不可预料的。可能程序立即崩掉,也...
    C++:在迭代中删除map的成员 
    

    首先要清楚一点,迭代器相当于是容器上的指针,容器可以自己管理内 存,因此迭代器可能失效。
    如果你在不知情的情况下使用了失效的迭代器,后果是不可预料的。可能程序立即崩掉,也可能什么事都没有发生。崩掉了算你 幸运,因为你至少知道出了问题,不然有你受的。

    回到正题,我想说什么呢?
    比如:
    程序代码

    map<string,int> theMap;
    // add something to theMap...
    
    for(auto iter1 = theMap.begin(); iter1 != theMap.end(); ++iter1)
    {
        if(iter1->second == xxx)
        {
            theMap.erase(iter1); //#1 erase the element ??!!
        }
    } 

    看样子貌似非常正常的一 段代码。在一个map中寻找值为xxx的项并删除。

    但是实际上这个代码是完全错误的,会导致无法预料的结果。


    问题就在#1处。一 旦你erase了一个iterator指向的内容,这个iterator就无效了。
    这时候你再对这个iterator做任何操作其结果都是未定义 的。

    那么该怎么办呢?
    还好,对于map这种以指针构建起来的容器来说,可以保证一个元素删除了,不影响指向其它元素的迭代器。
    因 此就可以这样做(《C++Standard Library》上建议的正确做法):

    程序代码


    for(auto iter1 = theMap.begin(); iter1 != theMap.end(); )
    {
    	if(iter1->second == xxx)
    	{
    		theMap.erase(iter1++); //#1 
    	}else
    	{
    		++iter1;
    	}
    } 




    展开全文
  • c++循环删除map元素

    千次阅读 2019-06-04 09:41:31
    写c++循环删除map,list等元素时,需要注意的细节: // 这里的调用是同一个线程里的,所以这里不用考虑互斥处理。 tagRtspData* item = NULL; map<SSocketKey, tagRtspData>::iterator it; for (it=...

    写c++循环删除map,list等元素时,需要注意的细节:

     

        // 这里的调用是在同一个线程里的,所以这里不用考虑互斥处理。
        tagRtspData* item = NULL;
        map<SSocketKey, tagRtspData>::iterator it;
    
        for (it=m_mapRtsp.begin(); it!=m_mapRtsp.end(); )
        {
            item = &it->second;
            const SSocketKey *sSktKey = &it->first;
    
            // 数据项为空,直接跳过
            if (NULL == item)       //不可能为空        !!!
            {
                m_mapRtsp.erase(it++);
    
                LogMessage(CM_LOG_WARN, "item is null, continue line.");
                continue;
            }
    
            if(*tm - item->lastTime.tv_sec > RTSP_TIMEOUT_TIME)        //判断是否超时
            {
                LogMessage(CM_LOG_NOTICE, "RTSP timeout, RTSP sIp=%x, dIp=%x, map size=%d",
                           sSktKey->SIP, sSktKey->DIP, m_mapRtsp.size());
    
                //处理RTSP 数据
    
    
                m_mapRtsp.erase(it++);
                continue;
            }
    
            ++it;
        }
    
    

     

     

            std::map<RTC::RtpStreamRecv*, uint32_t> mapRtpStreamMappedSsrc;

     

     

    展开全文
  • 转载地址: ... 删除所有偶数,并打印出删除 1. vector/queue  正确方法1: void erase(vector &v) { for(vector::iterator vi=v.begin();vi!=v.end();) { if(*vi % 2
    转载地址: http://www.cppblog.com/zgysx/archive/2006/12/28/16944.html

    删除所有偶数项,并打印出删除的项
    1. vector/queue 
    正确方法1:
    void erase(vector<int> &v)
    {
    for(vector<int>::iterator vi=v.begin();vi!=v.end();)
    {
    if(*vi % 2 == 0)
    {
    cout << "Erasing " << *vi << endl;
    vi = v.erase(vi);
    }
    else ++vi;
    }
    }

    正确方法2:
    void erase2(vector<int> &v)
    {
    for(vector<int>::reverse_iterator ri=v.rbegin();ri!=v.rend();)
    {
    if(*ri % 2 == 0)
    {
    cout << "Erasing " << *ri << endl;
    v.erase((++ri).base()); //erase()函数期待的是正向iterator,故而这里要调
    //用base()函数将逆向iterator转换为正向的
    }
    else ++ri;
    }
    }



    2.map/list
    正确方法
    void erase(map<int,int> &m)
    {
    for(map<int,int>::iterator mi=m.begin();mi!=m.end();)
    {
    if(mi->second % 2 == 0)
    {
    cout << "Erasing " << mi->second << endl;
    m.erase(mi++);
    }
    else ++mi;
    }
    }
    展开全文
  • C++:迭代中删除map的成员

    千次阅读 2012-04-12 17:12:16
    C++:迭代中删除map的成员  首先要清楚一点,迭代器相当于是容器上的指针,容器可以自己管理内 存,因此迭代器可能失效。 如果你不知情的情况下使用了失效的迭代器,后果是不可预料的。可能程序立即崩掉...
  • vue数据集合循环遍历删除重复主要代码 主要代码 deletefunc(totalList){ var temp = [] //一个新的临时数组 for (var i = 0; i < totalList.length; i++) { if (temp.indexOf(totalList[i]) == -1) { temp.push...
  • javascript Map Set 用法,创建,添加删除,Map元素遍历,Set元素遍历以及for...in循环,for...of循环的用法,forEach用法
  • 在循环中判断元素,满足某些条件时,需要删除元素,如果一个循环处理,会报:java.util.ConcurrentModificationException异常,稍微改下写法即可解决,参看如下黑体和红字部分操作: public static void main...
  • forEach(function(val, index, arr){}) // 其实就是用来代替for循环 4 arr.map() 做数据交互映射。正常配合return,返回一个新数组。如果没有 return 则相当于foreach平时使用map,一定要有return,可以 重新整理...
  • map,vector 等容器内容的循环删除问题(C++) map,vector等容器的循环删除不能用普通的方法删除: for(auto p=list.begin();p!=list.end();p++) list.erase(p); 类似的方式,会出错的,不信你调试试试 :) 这里...
  • 删除 Map 不满足条件的元素

    千次阅读 2015-01-30 09:51:03
    //删除值为空的 //集合类的都不能在循环的时候删除,因为删除元素后集合发生改变继而不能循环了 for(String str : addMap.keySet()) { double value = addMap.get(str); if(value == 0.0) {
  • 正确遍历删除Map中的元素

    千次阅读 2017-05-19 15:56:17
    遍历Map过程,不能用map.remove(key)来删除元素, 会引发并发修改异常,可以通过迭代器的remove();从迭代器指向的 collection 中移除当前迭代元素,来达到删除访问的元素的目的。package com.cx.test;import ...
  • 为数组的每个元素执行指定操作。 注: 没有办法中止或者跳出 forEach 循环,不管是break;continue或者是return跳出函数都不行,除非抛出一个异常。且不创建新数组。 array.forEach(callback(currentValue, ...
  • map、foreach和for循环区别

    千次阅读 2020-03-05 09:56:37
    2.foreach适用于只是进行集合或数组遍历,for则较复杂的循环中效率更高。 3.如果对集合的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为...
  • 本节将介绍列表循环删除其中某 需求是这样的:点击已经有的选项时,可以进行删除。 1. 数组下标的传递 需要删除其中某,那么首先就要知道当前点击的index,也就是下标,然后绑定一个事件。代码如下: // ...
  • // 以当前遍历的parentId,去map对象找到索引的id var parent = map [ item . fatherId ] ; // 好绕啊,如果找到索引,那么说明此项不顶级当中,那么需要把此项添加到,他对应的父级 if ( ...
  • 我是for循环中对list集合进行操作,爆出这个异常java.util.ConcurrentModificationException,如果尝试对集合做一些操作(例如删除元素,该表集合),可能会抛出java.util.ConcurrentModificationException的异常...
  • JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行起来那个比较快,不同循环方法使用那些场景。今天,李老师就来给大家讲解,各种JavaScript遍历方法的比较。各种数组遍历的方法for语句...
  • list/map中安全删除元素

    千次阅读 2014-12-17 16:11:37
    最近遇到在map中删除元素安全性的问题,于是查了查资料,记录一下。 问题的引出:一个关于list::erase()的问题。 写了个小程序试验listerase一个成员之后iterator 值的变化,程序注释部分是运行结果显示的...
  • splice():该方法会改变原始数组。 var arr=[1,2,3]; for(var i=0;i&lt;arr.length;i++){ console.log(i+'='+arr[i]); if(arr[i]==2){ ...由结果可以看出,这个循环循环了两次,没有判断当arr[i]=...
  • 使用迭代器从map或vector中删除元素

    千次阅读 2019-08-16 10:31:31
    std:map的迭代器:删除时只影响当前元素 #include "stdafx.h" #include <map> std::map<int, int> m; int main() { m[1] = 10; m[2] = 100; m[3] = 1000; std::map<int, int>::iterator it...
  • map删除元素

    2012-09-12 23:46:00
    遍历Map过程,不能用map.put(key,newVal),map.remove(key)来修改和删除元素, * 会引发 并发修改异常,可以通过迭代器的remove(): * 从迭代器指向的 collection 中移除当前迭代元素。 * */ ...
  • GoogleMap在js的应用

    2014-09-18 16:36:11
    此代码可定义一个名为 map 的变量,然后将该变量分配给新的 Map 对象,同时将该变量传递到 myOptions 对象常量内定义的选项。这些选项将会用于初始化地图的属性。Map() 函数称为“构造函数”,其定义如下: ...
  • java中Map的遍历方式

    千次阅读 2018-07-16 17:22:33
    javamap遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public class TestMap { public static Map&lt;...
  • Mapmap集合及特点_IDEADebug追踪

    千次阅读 2018-12-14 14:08:56
    现实生活,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map...
  • QMapfor循环中使用erase的用法注意 QMaperase后,itertator it指针已经被是否,再次调用将崩溃。erase函数返回指向删除后下一条数据...Map中存入0-9的一一对应的映射,要删除其中的偶数。   #include #i

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,309
精华内容 22,523
关键字:

在循环中删除map的项