C/C++:关于std::map中erase函数的使用

原创
2015/04/24 16:53
阅读数 65

(环境:Win7 64位, C++ builder 2010)

C/C++中使用STL相关的容器的频率非常高,如vector,list,map等,此处不作详述。

std::map中,经常涉及到匹配关键字来进行查找,有时候也会涉及到删除匹配的元素。特别需要注意的就是erase函数,它会使迭代器失效,再次使用可能导致未定义的行为。所以在for循环当中,不应累加迭代器,而应该在循环体内部累加。示例代码如下:

#include <map>

int _tmain(int argc, _TCHAR* argv[])
{
    std::map<int, int> clMap;
    
    clMap[1] = 111;
    clMap[2] = 222;
    clMap[3] = 333;

    std::map<int, int>::iterator pIter = clMap.begin();
    for (; pIter != clMap.end();) 
    {
        printf("(%d, %d)\n", pIter->first, pIter->second);
        
        if (pIter->second == 222)
        {
            clMap.erase(pIter++);
        }
        else
        {
            pIter++;
        }
    }
    
    system("pause");

    return 0;
}

参考链接:http://www.cnblogs.com/kex1n/archive/2011/12/06/2278505.html

参考链接:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4072589&ordertype=1

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部