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

C++中地图 赋值的有关问题

2013-04-09 
C++中map 赋值的问题代码如下#include maptypedef std::mapint,int rqInfoint main(){rqInfo MapMap

C++中map 赋值的问题
代码如下
#include <map>
typedef std::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;
   for(Iterator = Map.begin();Iterator!=Map.end();Iterator++)
   {
   printf("index = %d \n",Iterator->second);
   if(Iterator->first == 2)
   {
  rqinfomap.erase(Iterator);
   }
   }
}

为什么这样操作会有问题呢
两个map不能做相等操作 rqinfomap = Map;?
[解决办法]
=没有问题,问题在于两个map的迭代器不能共用,所以rqinfomap.erase(Iterator);
应该改为Map;或者将迭代器改为rqinfomap的迭代器。
其次就是erase删除操作会使迭代器失效,所以后边使用迭代器会有问题,可以在删除后将迭代器重新复位Iterator = Map.begin();
[解决办法]


rqinfomap.erase(Iterator);

删除的时候容器必须对应迭代器,你这里的 Iterator 是 Map 的,但却用它来删除 rqinfomap 的元素,虽然后者是前者的复制,但也会出问题。另外循环中 erase 的话,迭代器会出问题,应该这样弄。

 for(Iterator = Map.begin();Iterator!=Map.end();)
 {
  if(Iterator->first == 2)
  {
   Iterator = Map.erase(Iterator);
  }
  else
  {
   ++Iterator;
  }
 }

[解决办法]
 rqinfomap = Map;这样做是没有问题的,问题主要出在 rqinfomap.erase(Iterator);
Iterator这个迭代器指向的是Map的元素所在的内存地址,执行rqinfomap.erase(Iterator)肯定会异常,迭代器超出范围了;

热点排行