C++愤恨者札记9——vector.erase与set.erase
来源:互联网 发布:袋鼠云 知乎 编辑:程序博客网 时间:2024/06/07 21:20
//使用erase分别清理vector与set中的内容#include <vector>#include <string>#include <set>using namespace std;void FnVec(){vector<wstring> vec;vec.push_back( L"AAA" );vec.push_back( L"BBB" );vec.push_back( L"CCC" );vec.push_back( L"DDD" );auto it = vec.begin();while ( vec.size() ){auto t = it;it++;vec.erase( t );}}void FnSet(){set<wstring> s;s.insert( L"AAA" );s.insert( L"BBB" );s.insert( L"CCC" );s.insert( L"DDD" );auto it = s.begin();while ( s.size() ){auto t = it;it++;s.erase( t );}}void main(){FnSet();FnVec();}
FnSet会将set中的所有元素删除的,但FnVec会导致程序崩溃。
原因是FnVec调用vec.erase(t)时,t后面的元素会往前滑动,从而指向这些元素的迭代器也受到了影响。而FnSet中调用erase是,元素不会发生滑动,因为set不像vector可以随机顺序访问,迭代器没受影响, 所以可以正常删除。
PS: while循环中的代码可以简化成:
while ( s.size() )
{
s.erase( it++ );
}
因为迭代器operator++()中已经分配了一个临时变量:
_Myiter operator++(int)
{ // postincrement
_Myiter _Tmp = *this;
++*this;
return (_Tmp);
}
- C++愤恨者札记9——vector.erase与set.erase
- STL_set——set::erase
- erase vector
- vector erase
- vector erase
- vector erase
- Vector-Erase
- vector 与list 之erase
- set:: erase
- C++愤恨者札记6——函数指针与函数对象
- C++愤恨者札记3——函数调用约定
- C++愤恨者札记7——函数适配器
- C++愤恨者札记10——bind2nd示例
- LintCode笔记(9)——合并排序数组 与vector的insert和erase总结笔记
- C++primer学习-vector中的erase函数
- hackerrank>Dashboard>C++>STL>Vector-Erase
- C++/STL用erase删除元素(vector,deque),(list,set,map)
- STL vector中remove()与erase()使用
- Xcode 4设置代码覆盖率
- Flex LineChart 动态添加线(LineSeries)及颜色
- 苹果官方示例代码《LazyTableImages》异步加载图片的学习记录
- MFC对话框使用技巧
- C# 基础知识系列之 操作符重载
- C++愤恨者札记9——vector.erase与set.erase
- YUM常用命令介绍
- flowplayer轮播与遮罩
- a++运算符
- JS 判断浏览器客户端类型(ipad,iphone,android)
- pthread-win32在VC2005下的使用
- oracleR2 11g windows7 专业版无法安装
- 1020. Tree Traversals
- VC中创建不可改变大小的窗口