Jiwu Bu

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  32 随笔 :: 0 文章 :: 25 评论 :: 0 Trackbacks
 1 #include <iostream>
 2 #include <map>
 3 #include <string>
 4 
 5 using namespace  std;
 6 
 7 int main(int argc, char* argv[])
 8 {
 9     map<stringint> MyMap;
10 
11     MyMap["bujiwu"= 26;
12     MyMap["swallow"= 25;
13 
14     std::cout <<"Before delete element:" << std::endl;
15     for( map<stringint>::iterator Itor = MyMap.begin();
16             Itor != MyMap.end(); Itor++ )
17     {
18         std::cout << Itor->first << "   " << Itor->second << std::endl;
19     }
20 
21     for( map<stringint>::iterator Itor = MyMap.begin();
22             Itor != MyMap.end(); )
23     {
24         if ( Itor->first == "bujiwu" )
25         {
26             MyMap.erase(Itor++); //在windows下也可以Itor = MyMap.erase(Itor),但是在linux下不行。
27         }
28         else
29         {
30             Itor++;
31         }
32     }
33 
34     std::cout <<"After delete element:" << std::endl;
35     for( map<stringint>::iterator Itor = MyMap.begin();
36             Itor != MyMap.end(); Itor++ )
37     {
38         std::cout << Itor->first << "   " << Itor->second << std::endl;
39     }
40 
41     return 0;
42 }
43 
44 

通过测试在不管在linux还是Windows平台下,vector,list都有方法iterator erase( iterator _Where );
但是在Linux下map中没有方法iterator erase( iterator _Where ); 所以上述代码在Linux平台下第26行必须写成MyMap.erase(Itor++),而不能写能Itor = MyMap.erase(Itor). 在Windows下二种方法都可以。

posted on 2009-11-01 10:40 bujiwu 阅读(5070) 评论(4)  编辑 收藏 引用 所属分类: Linux

评论

# re: Linux与Windows中map类erase方法的差异 2009-11-05 01:50 OwnWaterloo
Windows还是linux没有直接关系。于STL实现有直接关系。
map.erase有3个重载:
void erase ( iterator position );
size_type erase ( const key_type& x );
void erase ( iterator first, iterator last );

返回iterator的erase是不符合STL标准的。

  回复  更多评论
  

# re: Linux与Windows中map类erase方法的差异 2009-11-07 21:56 bujiwu
@OwnWaterloo
"返回iterator的erase是不符合STL标准的" 但是vector, list不管在linux下还是windows下的stl都有返回iterator的erase? 只有map不同?不清楚哪个符合标准。  回复  更多评论
  

# re: Linux与Windows中map类erase方法的差异 2009-11-07 22:49 OwnWaterloo
@bujiwu
map.erase有3个重载
...
返回iterator的erase是不符合STL标准的。  回复  更多评论
  

# re: Linux与Windows中map类erase方法的差异[未登录] 2014-07-29 10:01 wz
牛  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理