首页 > 代码库 > map 和 vector 的erase函数说明
map 和 vector 的erase函数说明
1. map的erase函数使用
这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在。根据参考文献1:
在C++98中:
?
1 2 3 4 5 | (1) void erase (iterator position); (2)size_type erase ( const key_type& k); (3) void erase (iterator first, iterator last); |
在C++11中:
?
1 2 3 4 5 | (1)iterator erase (const_iterator position); (2)size_type erase ( const key_type& k); (3)iterator erase (const_iterator first, const_iterator last); |
这直接导致了在使用map类型的容器时,返回值可能不是指向当前删除元素的下一个迭代器的位置。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | map<string,string> mapTest; typedef map<string,string>::iterator ITER; //<span style="color: rgb(255, 0, 0);">method 1:使用删除之前的迭代器定位下一个元素。 </span> for (ITER iter=mapTest.begin();iter!=mapTest.end();) { cout<<iter->first<< ":" <<iter->second<<endl; mapTest.erase(iter++); } <span style= "color: rgb(255, 0, 0);" > //method 2:erase() 成员函数返回下一个元素的迭代器 </span> for (map<string,string>::const_iterator iter=mapTest.begin();iter!=mapTest.end();) { cout<<iter->first<< ":" <<iter->second<<endl; iter=mapTest.erase(iter); } |
因此,method 2适合于C++11标准,而大多数时候,我们目前用的都是C++98标准,应该采用method 1.
2. vector的erase方法
根据文献2,:
c++98和c++11中,vector的erase方法基本上形式是一致的,只不过传入参数的迭代器的形式有所变化,在使用上,都采用类似于上述method 2的方法。
c++98:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
c++11:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
这点务必引起注意。
Reference
[1]http://www.cplusplus.com/reference/vector/vector/erase/
[2]http://www.cplusplus.com/reference/map/map/erase/
[3]http://www.cppblog.com/abware/archive/2014/04/22/72459.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。