相关疑难解决方法(0)

如何在迭代时从地图中删除?

如何在迭代时从地图中删除?喜欢:

std::map<K, V> map;
for(auto i : map)
    if(needs_removing(i))
        // remove it from the map
Run Code Online (Sandbox Code Playgroud)

如果我使用map.erase它将使迭代器无效

c++ map c++11

160
推荐指数
6
解决办法
10万
查看次数

如果在从头到尾迭代时调用map元素上的erase()会发生什么?

在下面的代码中,我遍历一个map并测试是否需要擦除一个元素.擦除元素并继续迭代是否安全,或者我是否需要在另一个容器中收集密钥并执行第二个循环来调用erase()?

map<string, SerialdMsg::SerialFunction_t>::iterator pm_it;
for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++)
{
    if (pm_it->second == delete_this_id) {
        port_map.erase(pm_it->first);
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:当然,我读了这个问题,我认为这个问题没有关系,但回答了我的问题.

c++ iterator stl

132
推荐指数
2
解决办法
8万
查看次数

列表迭代器不可递增

我有一个使用visual studio 2003构建的旧项目,最近我用vs2005重新编译了它.但是,在运行时,我收到以下错误:

列表迭代器不可递增

我跟踪程序到这个函数:

void InputQueue::update()
{
    list<PCB>::iterator iter;
    list<PCB>::iterator iterTemp;
    for(iter = begin(); iter != end(); iter++)
    {
        if(iter->arrivalTime == 0)
        {           
            ReadyQueue::getInstance()->add(*iter);
            iterTemp = iter;
            iter++;
            erase(iterTemp);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不是C++专家,这就是VS调试器给我的.有人可以向我解释问题是什么吗?

谢谢

c++ iterator stl list

6
推荐指数
2
解决办法
2万
查看次数

为什么g ++ 4.0版本的map <T> :: erase(map :: <T> iterator)不返回迭代器?

我正在将一个中型C++项目从Visual Studio 2005移植到MacOS,XCode/GCC 4.0.

我偶然发现的一个差异与从地图中删除元素有关.在Visual Studio中,我可以擦除迭代器指定的元素,并将返回值赋给迭代器以获取下一个元素的位置.这样,迭代器在擦除后不会指向某个无效地址.

换句话说,在Visual Studio中我可以这样做:

itor = m_ResourceMap.erase(itor);

在GCC 4.0中,擦除函数返回void,所以我不能这样做.这是否意味着以下映射元素向后移动,因此迭代器自动指向下一个元素,或者这是否意味着我必须在之后增加迭代器?该 在线文档STL是不是关于这个问题的非常简洁的XCode似乎并没有什么.

谢谢你的帮助,

阿德里安

c++ gcc stl

3
推荐指数
1
解决办法
1909
查看次数

当我从地图中删除条目时,`map :: iterator`会发生什么?

可能重复:
如何过滤std :: map中的项目?
如果在从头到尾迭代时调用map元素上的erase()会发生什么?

我有对象的地图,我想迭代它并删除一些条目.

typedef std::map<A,B> MapT;
MapT m;
MapT::iterator it;

for(it = m.begin(); it != m.end(); it++ ) {
    if( condition ) m.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?

c++ iterator map

3
推荐指数
1
解决办法
445
查看次数

删除映射中的特定条目,但迭代器必须指向删除后的下一个元素

重复:

如果在从头到尾迭代时调用地图元素上的擦除会发生什么

如何从stdmap过滤项目

我有一张地图map1<string,vector<string>>我有一个地图"itr"的迭代器.我想从这个地图中删除"itr"指向的条目.我可以使用map1.erase(itr)函数; 在此行之后,迭代器"itr"变为无效.根据我在项目中的要求,迭代器必须指向下一个元素.可以任何身体帮助我提前重新启动这个坦克:) santhosh

c++ stl map

2
推荐指数
1
解决办法
5252
查看次数

C++:从地图中删除迭代器,然后递增到下一个迭代器

此方法导致中止错误:"map/set iterator not incrementable." 由于在if失败之后并且确定应该擦除的虚拟迭代器(并且是),继续到映射中的下一个迭代器++_iter失败,因为_iter它不再是有效的对象/指针.

迭代地图的正确程序是什么,并且能够在整个过程中删除单个项目?

typedef std::map<std::string, BITMAP*> MapStrBmp;
typedef MapStrBmp::iterator MapStrBmpIter;
\\...
void BitmapCache::CleanCache() {
    //Clean the cache of any NULL bitmaps that were deleted by caller.
    for(MapStrBmpIter _iter = _cache.begin(); _iter != _cache.end(); ++_iter) {
        if(_iter->second != NULL) {
            if((_iter->second->w < 0 && _iter->second->h < 0) == false) continue;
        }
        _cache.erase(_iter);
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator stdmap allegro

2
推荐指数
1
解决办法
3003
查看次数

标签 统计

c++ ×7

iterator ×4

stl ×4

map ×3

allegro ×1

c++11 ×1

gcc ×1

list ×1

stdmap ×1