首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

STL中地图的方法erase()有关问题

2013-04-20 
STL中map的方法erase()问题对erase方法不是特别了解的先看一下这个资料http://hi.baidu.com/sdkinger/item

STL中map的方法erase()问题
对erase方法不是特别了解的先看一下这个资料http://hi.baidu.com/sdkinger/item/dcad78e374707ff12b09a453

#include "stdafx.h"
#include <map>
#include <iostream>
using namespace std;

typedef map<int,int> rqInfo;
int main()
{
rqInfo Map;
Map.insert(rqInfo::value_type(1,10));
Map.insert(rqInfo::value_type(2,20));
Map.insert(rqInfo::value_type(3,30));


rqInfo rqinfomap;

rqinfomap = Map;
rqInfo::iterator Iterator= Map.begin();
rqInfo::iterator Iteratortemp=Iterator;
printf("index=%d\n",Iterator->second);
printf("index=%d\n",Iteratortemp->second);
Map.erase(Iterator);
Iteratortemp++;//此处为什么Iterator失效后,Iteratortemp也跟着失效了呢,莫非是删除此元素的位置之后,所有引用此处的迭代器都会失效,懂的可以讲解一下。
printf("index=%d\n",Iteratortemp->second);
}
STL,迭代器,map?erase
[解决办法]
迭代器只是指向容器里的元素, 不是包含一个容器里的元素.
元素都从容器里删除了, 它所指向的位置自然就失效了.
[解决办法]
所有STL容器类的iterator都只有一个成员变量_Myptr,是指针类型,指向着对应容器里某个元素.复制的时候把指针复制了一下,元素被删除,那个就无效了
[解决办法]
这样理解吧:迭代器是指针,所以你才可以通过迭代器直接修改容器元素,一个指针失效,和他等值的指针当然也失效了。

热点排行