STL的erase函数和lower_bound
前提摘要:
【1】一般我们的区间是左闭右开,如下面例子2。
【2】erase函数谨慎使用。
【3】map也是有序保存的。
【erase】
1,删除字符串的首字母:
string s="ecust";
s.erase(s.begin());
cout<<s<<endl;
2,删除字符串的某些字母:(一般函数是左闭右开,所以下面是删除s[1],s[2],得到“est666”)
string s="ecust666";
s.erase(s.begin()+,s.begin()+);
cout<<s<<endl;
3,注意删除东西时不要直接用下标it++,可以执行下面代码试一试。(这只是其中一种错误,反正就是少用erase)
比如删除‘3’,下面是错误代码,跳过了一个3,没有删干净。
#include <iostream>
#include <vector>
using namespace std;
vector<int> v;
int main( ) {
int i;
for (i=;i<;i++) {
v.push_back( i );
if (i==) v.push_back( i );
}
vector<int>::iterator it=v.begin();
for(;it!=v.end();it++) {
if ( *it==) it= v.erase(it);
}
for(i=;i<v.size();i++ )
cout<<" i= "<<i<<", "<<v[i]<<endl;
return ;
}
以为删去一个后,后面的下标都提前了,不能直接it++
说明删东西时下标就别++了,这里改一下就ok:
for(;it!=v.end();) {
if ( *it==) it= v.erase(it);
else it++;
}
4,删去数值大小范围在[a,b]的数。q是set等有序容器。
(注意,这里的upper_bound得到的是开,erase也是开。保证了删除范围包括b。)
q.erase(q.lower_bound(a),q.upper_bound(b));
5,暂时想起这么点,慢慢积累
【lower_bound】
对于bound,返回位置下面一看就理解了吧。
1,set(常见的有序容器)的lower_bound,如
找到不超过x的最大数:
scanf("%d",&a);
set<int>:: iterator it=q.upper_bound(a);
it--;
printf("%d\n",*it);
2,map(也可以有序,想不到吧)的lower_bound(以第一关键字排序),如
map<int,int>::iterator it = mp.lower_bound(v);
3,vector同理
4,慢慢积累
STL的erase函数和lower_bound的更多相关文章
- 正确使用stl vecotr erase函数
erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. 返回值是指向删除的最后一个元素的下一位置的迭代器 Parameters All parameters ar ...
- 【C/C++开发】STL erase()函数使用要小心
http://blog.sina.com.cn/s/blog_67b6b720010114d3.html erase()函数的功能是用来删除容器中的元素 删除某个容器里的某个元素:c.erase(T) ...
- STL中使用reverse_iterator时,如何正确使用erase函数
假设有一个list容器,顺序存储了0-9一个10个整数.现在要使用reverse_iterator迭代器来查找值为8和5的元素,并且将这两个数删除.先来看以下的解决方法: #include <i ...
- STL区间成员函数及区间算法总结
STL区间成员函数及区间算法总结 在这里总结下可替代循环的区间成员函数和区间算法: 相比单元素遍历操作,使用区间成员函数的优势在于: 1)更少的函数调用 2)更少的元素移动 3)更少的内存分配 在区间 ...
- STL中erase的小心使用
先看如下一道改错题: #include<iostream> #include<vector> using namespace std; void print(vector< ...
- Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)
传送门 在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习. unique函数 在STL中unique函数是一个去重 ...
- c++ STL unique , unique_copy函数
一.unique函数 类属性算法unique的作用是从输入序列中"删除"全部相邻的反复元素. 该算法删除相邻的反复元素.然后又一次排列输入范围内的元素,而且返回一个迭代器(容器的长 ...
- STL中erase()的陷阱
最近在刷stl源码剖析这本书时,对于vector的erase()函数引起了我的注意 在删除单个元素时是这样定义的: iterator erase(iterator position){ !=end() ...
- STL之list函数解析
STL之list函数解析 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用 ...
随机推荐
- 预防SQL注入攻击
/** * 预防SQL注入攻击 * @param string $value * @return string */ function check_input($value) { // 去除斜杠 if ...
- 一步步讲解如何开源自己的项目到GitHub上,Mac机示例
如果你有自己的优秀项目,想要分享给大家,那GitHub会是你正确的选择.如何才能将自己的项目上传到GitHub上呢?接下来请一步一步跟着走. 需要准备的资源: 1.一台Mac机 2.安装git客户端( ...
- vue 项目结构说明
eslink:规范es6的代码风格检测工具. npm install node-sass -g :全局安装,即使安装之后可以全局使用dode-sass,不用进到工具目录. .babel:把es6转换成 ...
- Android开发之旅-Fragment和Activity之间onCreateOptionsMenu的联系
Fragment和Activity一样,可以重写onCreateOptionsMenu方法来设定自己的菜单,其实这两个地方使用onCreateOptionsMenu的目的和效果都是完全一样的,但是由于 ...
- JDK源码 - ArrayList (基于1.7)
前言 推荐一位大牛的博客: https://blog.csdn.net/eson_15/article/details/51121833 我基本都是看的他的源码分析,刚开始如果直接看jdk源码可能 ...
- DNS 转发配置
DNS 转发配置 我们配置DNS是只能解析我们定义的zone的,我们没有定义的是不能解析的. 配置DNS转发就可以解析其他互联网上的域名了,前提是这个域名在互联网中的企业在使用. 也就是说这个域名已经 ...
- 编写自已的第一个MapReduce程序
从进入系统学习到现在,貌似我们还没有真正开始动手写程序,估计有些立志成为Hadoop攻城狮的小伙伴们已经有些急了.环境已经搭好,小讲也有些按捺不住了.今天,小讲就和大家一起来动手编写我们的第一个Map ...
- Android系统--灯光系统驱动编写
Android系统开发--Android灯光系统tiny4412_led_class驱动编写 框架分析 led_classdev_4412结构体 创建led_classdev_4412结构体 分配结构 ...
- 【bzoj1258】三角形tri[CQOI2007](乱搞)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1258 这是道很意思的大水题,虽然看上去一脸懵逼,但画张图出来看看也可以窥见一丝端倪. ...
- LeetCode——sum-root-to-leaf-numbers
Question Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a ...