码迷,mamicode.com
首页 > 其他好文 > 详细

map和vector删除遍历

时间:2015-04-16 21:24:50      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

 1 #include <iostream>
 2 #include <string>
 3 #include <map>
 4 
 5 using namespace std;
 6 
 7 int main(int argc, char* argv[])
 8 {
 9     map<string, string> mapData;
10     
11     mapData["a"] = "aaa"; 
12     mapData["b"] = "bbb"; 
13     mapData["c"] = "ccc"; 
14 
15     for (map<string, string>::iterator i = mapData.begin(); i != mapData.end(); ++i)
16     {
17         cout << i->first << ", " << i->second << endl;
18     }
19     cout << "++++++++++++++++++++++++++++++++" << endl;
20 
21     for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); ++i)
22     {
23         cout << "execute key: " << i->first << endl;
24         if (i->first == "b")
25         {
26             //windows 的STL中,map的erase方法会返回一个iterator,这个iterator指向的是当前被删除的iterator后面的iterator,gcc编译报错
27             i = mapData.erase(i);
28             --i;
29         }        
30     }
31     cout << "********************" << endl;
32     for (map<string, string>::iterator i = mapData.begin(); i != mapData.end(); ++i)
33     {
34         cout << i->first << ", " << i->second << endl;
35     }
36 
37     return 0;
38 }

 

 

 1     for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); ++i)
 2     {
 3         cout << "execute key: " << i->first << endl;
 4         if (i->first == "b")
 5         {
 6             //  注意: mapData.erase(i);  // erase以后   i已经失效,不能再用i++;      
 7             
 8             //  linux STL和 windows STL通用的写法  
 9             //  这段代码的真正等效代码是
10             //  map<string, string>::iterator iterTemp = i;
11             //  ++i;
12             //  mapData.erase(iterTemp);
13 
14             //  i++操作主要做三件事情:
15             //      1、首先把i备份一下。
16             //      2、把i加上1。
17             //      3、返回第一步备份的i。
18 
19             mapData.erase(i++);
20             --i;            
21         }        
22     }

 

 

 1     for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); ++i)
 2     {
 3         cout << "execute key: " << i->first << endl;
 4         if (i->first == "b")
 5         {
 6             map<string, string>::iterator tmp = i;
 7             ++i;
 8             mapData.erase(tmp);
 9             --i;            
10         }        
11     }

 

map和vector删除遍历

标签:

原文地址:http://www.cnblogs.com/itpoorman/p/4433116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!