前提摘要:

【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(以第一关键字排序),如

HDU4585

map<int,int>::iterator it = mp.lower_bound(v);

3,vector同理

4,慢慢积累

STL的erase函数和lower_bound的更多相关文章

  1. 正确使用stl vecotr erase函数

    erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. 返回值是指向删除的最后一个元素的下一位置的迭代器 Parameters All parameters ar ...

  2. 【C/C++开发】STL erase()函数使用要小心

    http://blog.sina.com.cn/s/blog_67b6b720010114d3.html erase()函数的功能是用来删除容器中的元素 删除某个容器里的某个元素:c.erase(T) ...

  3. STL中使用reverse_iterator时,如何正确使用erase函数

    假设有一个list容器,顺序存储了0-9一个10个整数.现在要使用reverse_iterator迭代器来查找值为8和5的元素,并且将这两个数删除.先来看以下的解决方法: #include <i ...

  4. STL区间成员函数及区间算法总结

    STL区间成员函数及区间算法总结 在这里总结下可替代循环的区间成员函数和区间算法: 相比单元素遍历操作,使用区间成员函数的优势在于: 1)更少的函数调用 2)更少的元素移动 3)更少的内存分配 在区间 ...

  5. STL中erase的小心使用

    先看如下一道改错题: #include<iostream> #include<vector> using namespace std; void print(vector< ...

  6. Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)

    传送门 在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习. unique函数 在STL中unique函数是一个去重 ...

  7. c++ STL unique , unique_copy函数

    一.unique函数 类属性算法unique的作用是从输入序列中"删除"全部相邻的反复元素. 该算法删除相邻的反复元素.然后又一次排列输入范围内的元素,而且返回一个迭代器(容器的长 ...

  8. STL中erase()的陷阱

    最近在刷stl源码剖析这本书时,对于vector的erase()函数引起了我的注意 在删除单个元素时是这样定义的: iterator erase(iterator position){ !=end() ...

  9. STL之list函数解析

    STL之list函数解析 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用 ...

随机推荐

  1. 【整理学习Hadoop】H D F S 一个分布式文件系统

    Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别 ...

  2. php备份mysql数据库

    <?php /*程序功能:mysql数据库备份功能*/ ini_set('max_execution_time','0'); ini_set('memory_limit','1024M');// ...

  3. JAVA中的Token 基于Token的身份验证

    最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求的SessionId,导致服务器每次接收安卓发送的请求访问时都 ...

  4. 建议40:深入掌握ConfigParser

    # -*- coding:utf-8 -*- ''' 1.getboolean() 根据一定的规则将配置项的值转换为布尔值 getboolean() 的真值规则: 0.no.false 和off 都会 ...

  5. shell复制除了某个文件的操作

    将app的已经写成带有日期名的日志放到归档特定目录(刨除正在记录的日志) find $APPHOME/logs | grep -v "info.log\|debug.log\|error.l ...

  6. 离乡与理想 Demo

    离乡与理想---理想不分黑白 踏上了火车,离开家乡背着幻梦,站累了有人叫我幸福,叫我快乐而我是没有名字的流浪的日子,已数不清有多少带着理想,一路飞翔路上遇见困难,一定要坚强因为理想已离乡 我为理想而离 ...

  7. 三 ip dns等配置

    一IP.端口.协议基本概念 ip的简单概念 互联网上的计算机,都会有一个唯一的32位的地址,ip地址 我们访问服务器,就必须通过ip地址 局域网里也有预留的ip地址  192/10/172.居于王的i ...

  8. Kubernetes client-go

    Github地址:https://github.com/kubernetes/client-go 访问kubernetes集群有几下几种方式: 方式 特点 支持者 Kubernetes dashboa ...

  9. Java多线程的集合类

    适用于多线程环境下的集合类: 1.阻塞队列:ArrayBlockingQueue(数组实现队列),LinkedBlockingQueue(链表实现队列) public class BlockingQu ...

  10. Luogu-3966 [TJOI2013]单词

    这道题应该是后缀数组的套路题啊,把单词连接起来,中间用没有出现过且互不相同的字符来分隔开,求一下\(height\)数组. 对于一个单词来说,设单词长\(len\),所在的后缀为\(i\),如果某后缀 ...