map erase iterator】的更多相关文章

错误写法: map<int, int> m; for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { m.erase(it); } 这样会导致程序行为不可知.因为map是关联容器,对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用:否则会导致程序无定义的行为. 正确写法1(STL推荐写法): map<int, int> m; for (map<int…
map::erase函数在不同版本stl中的差异 1. C++98和C++11标准 http://www.cplusplus.com/reference/map/map/erase/ 2. pj stl(windows) map::erase函数的windows实现版本(C++11标准)会返回一个map::iterator: iterator map::erase(const_iterator _Where); iterator map::erase(const_iterator _First,…
C++ 中经常使用的容器类有vector,list,map.其中vector和list的erase都是返回迭代器,但是map就比较不一样. 当在循环体中使用map::erase语句时,为了能够在任何机器上编译通过,并且能够跨平台(windows.linux),正确的写法是: map<int, int> l_map; map<int, int>::iterator l_iter = l_map.begin(); map<int, int>::iterator l_iter…
总结一下map::erase的正确用法. 首先看一下在循环中使用vector::erase时我习惯的用法: for(vector<int>::iterator it = vecInt.begin(); it != vecInt.end();) { if(*it == 0) { it = vecInt.erase(it); } else { it++; } } 程序从一个vector中删除值为0的元素,利用了vector::erase函数根据iterator删除某个元素时会返回下一个元素的ite…
vector::erase()返回下一个iter: STL中的源码: //清除[first, last)中的所有元素 iterator erase(iterator first, iterator last) { iterator i = copy(last, finish, first); //[last, finish)拷贝到first destroy(i, finish); finish = finish - (last - first); return first; } //清除某个位置…
//获得map的迭代器,用作遍历map中的每一个键值对Iterator是迭代器,map之前应该定义过,姑且认为是HashMap.<Entry<String,String>>表示map中的键值对都是String类型的.map.entrySet()是把HashMap类型的数据转换成集合类型map.entrySet().iterator()是去获得这个集合的迭代器,保存在iter里面..迭代器这么用:while(iter.hasNext()) { Entry obj = it.next(…
1.首先创建一个HashMap, Map map= new HashMap(); 2.Iterator iter= map.entrySet().iterator(); 首先是map.entrySet()是把HashMap类型的数据转换成集合类型; 然后是获得map的迭代器,用作遍历map中的每一个键值对: iterator()是去获得这个集合的迭代器,保存在iter里面: 遍历迭代器的方法是:while (iter.hasNext()) { Entry obj = it.next();//就能…
1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string,string>::iterator ITER; ITER iter=mapTest.find(key); mapTest.erase(iter); 像上面这种删除单个节点,map的行为不会出现问题,但是当在一个循环里用的时候,往往会被误用. 2.陷阱 eg: for(ITER iter=mapTest…
例子: #include <iostream> #include <map> using namespace std; int main() { map<int, int> test_map; test_map[] = ; test_map[] = ; test_map[] = ; test_map[] = ; for(std::map<int, int>::iterator iter = test_map.begin();iter != test_map.…
首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组允许重复的对象.Collection接口派生了两个子接口Set和List,分别定义了两种不同的存储方式,如下: 2. Set接口 Set接口继承于Collection接口,它没有提供额外的方法,但实现了Set接口的集合类中的元素是无序且不可重复. 特征:无序且不可重复. 3.  List接口 List接口同样也继承于Collection接口,但是与Set接口恰恰…