首页 > 代码库 > 慎用stl中的erase的返回值
慎用stl中的erase的返回值
在windows下的VC编译或者Mac OX的XCode下编译也许不会出问题。但是在linux下可能就会挂掉。
比如我上一篇里的poj4093出现了编译错误
2007120.8890/Main.cc: In function ‘int main()’:2007120.8890/Main.cc:50:44: error: no match for ‘operator=’ in ‘itr1 = a.std::set<_Key, _Compare, _Alloc>::erase [with _Key = int, _Compare = std::less<int>, _Alloc = std::allocator<int>, std::set<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<int>](itr1)’/usr/include/c++/4.5/bits/stl_tree.h:224:5: note: candidate is: std::_Rb_tree_const_iterator<int>& std::_Rb_tree_const_iterator<int>::operator=(const std::_Rb_tree_const_iterator<int>&)
将itr1 = a.erase(itr1);// 这个地方有bug
改成了a.erase(itr1++);问题就解决了!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。