STL可能的误用-find_first_of和erase
来源:互联网 发布:etsy软件 编辑:程序博客网 时间:2024/05/20 08:01
一.string中find_first_of的误用
STL中提供的string可以说极大方便了对字符串的操作,但是很多函数由于样子上很相似,所以导致很容易理解错误,find_first_of和find就是一个很好的例子。
我们先来看一下string提供的查找相关的函数列表:
如此简洁的说明,其实完全没有把他们最重要的区别描述出来,请务必记住:
对于find和rfind:
- 匹配的是整个被查找串
对于find_first_of,find_first_not_of,find_last_of,find_last_not_of:
- 匹配的是被查找串中的任意字符
我们来测试一下:
运行结果如下:
结果中4294967295即string::npos,代表没有找到。而在find_first_of(str2)的时候返回的是3,即字符'e',证明了我们之前的说法。
二.erase函数的误用
STL的容器一般都会提供erase方法,vector,list等的erase方法都会返回下一个元素的指针,所以在for循环中对容器进行erase时,代码一般如下即可:
但是偏偏stl的map的erase不会返回下一个的指针,所以使用起来很让人困惑。其实本来很简单的一个问题,现在却被搞得很复杂。
为了不给大家造成混淆,这里只列出两种正确的方法,大家按照这种方法来写就绝对没有问题,也不用考虑不同的stl的map实现。
1.简短型
2.易读型
运行结果都为:
对于第一种方法,千万不要理解等同于:
对于笔者本人来说,更倾向第二种方法,因为虽然文章中是直接调用
但实际情况可能是调用一个函数,而在这个函数里面会有一堆逻辑出来判断是否要删除这个元素,这种情况下只有用第二种方法能够满足。
原文链接地址 : http://www.vimer.cn/?p=2008
- STL可能的误用-find_first_of和erase
- stl string的substr和find_first_of函数的一点心得
- C++的STL之find_first_of
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL remove 和 erase 的区别
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL remove和erase
- STL remove和erase
- STL remove和erase
- STL remove和erase
- STL remove和erase
- SQL字符串操作汇总
- 把datagridview导出到execl表格中、datagridview添加下拉列表框
- 自定义日志类LogTrace思路及简单例子
- 深入解析scanf()/getchar()和gets()等函数针对字符串输入的问题
- 使用Axis2中的工具wsdl2Java的生成客户端和服务端代码
- STL可能的误用-find_first_of和erase
- 指针的使用方法【三】
- VS2010, WPF工程添加图片资源
- winrar4.0 注册码 key
- securecrt
- WPF,Grid划分界面区域
- 常见magento问题系列四-----后台的分类页面不正常显示
- 在SourceInsight中用快捷键打开文件所在的目录
- JVM启动参数大全