在STL容器有顺序容器和关联容器两种。

顺序容器删除元素的方法有两种:

1.c.erase(p) 从c中删除迭代器p指定的元素。p必须指向c中一个真实元素,不能等于c.end()。返回一个指向p之后元素的迭代器,若p指向c中的尾元素,则返回c.end()

2.3.c.erase(b,e) 删除迭代器对b和e所代表的范围中的元素。返回e

关联容器删除元素的方法有三种:

1.c.erase(k) 从c中删除每一个关键字为k的元素。返回一个size_type值,指出删除的元素的数量。

2.c.erase(p) 从c中删除迭代器p指定的元素。p必须指向c中一个真实元素,不能等于c.end()。返回一个指向p之后元素的迭代器,若p指向c中的尾元素,则返回c.end()

3.c.erase(b,e) 删除迭代器对b和e所代表的范围中的元素。返回e

下面是顺序容器删除迭代器指定的元素:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(19);
vec.push_back(1);
vec.push_back(14);
vec.push_back(6);
vec.push_back(4);
vec.push_back(3);
for (auto it : vec)
{
cout << it << " ";
}
cout << endl;
auto low = vec.begin();
vec.erase(low+2);//删除了迭代器low+2指定的元素
for (auto it : vec)
{
cout << it << " ";
}
return 0;
}

  运行结果:

下面是顺序容器删除两个迭代器之间的元素:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(19);
vec.push_back(1);
vec.push_back(14);
vec.push_back(6);
vec.push_back(4);
vec.push_back(3);
for (auto it : vec)
{
cout << it << " ";
}
cout << endl;
auto low = vec.begin();
vec.erase(low+2 , low + 4);//删除了迭代器所表示的范围中的元素,删除了1和14
for (auto it : vec)
{
cout << it << " ";
}
return 0;
}

  运行结果:

下面是关联容器删除指定关键字元素:

#include<iostream>
#include<algorithm>
#include<map>
#include<string>
using namespace std; int main()
{
map<string, int> mmap;
string str;
mmap.insert({ "wu",1 });
mmap.insert({ "wang",1 });
mmap.insert({ "lin",1 });
mmap.insert({ "xiao",2 });
cout << "删除元素前" << endl;
for (auto it : mmap)
{
cout << it.first << " " << it.second << endl;
}
int num=mmap.erase("xiao");
cout << "删除元素后" << endl;
for (auto it : mmap)
{
cout << it.first << " " << it.second << endl;
}
cout << "删除元素数量" << num<<endl;//如果是允许重复关键字的容器,删除的元素数量可能大于1
return 0;
}

  运行结果:

#include<iostream>
#include<algorithm>
#include<map>
#include<string>
using namespace std; int main()
{
map<string, int> mmap;
string str;
mmap.insert({ "wu",1 });
mmap.insert({ "wang",1 });
mmap.insert({ "lin",1 });
mmap.insert({ "xiao",2 });
cout << "删除元素前" << endl;
for (auto it : mmap)
{
cout << it.first << " " << it.second << endl;
}
map<string,int>::iterator low = mmap.begin();
mmap.erase(low);//返回一个指向low之后元素的迭代器
cout << "删除元素后" << endl;
for (auto it : mmap)
{
cout << it.first << " " << it.second << endl;
}
return 0;
}

运行结果:

删除两个迭代器之间所表示的范围中的元素:

#include<iostream>
#include<algorithm>
#include<map>
#include<string>
using namespace std; int main()
{
map<string, int> mmap;
string str;
mmap.insert({ "wu",1 });
mmap.insert({ "wang",1 });
mmap.insert({ "lin",1 });
mmap.insert({ "xiao",2 });
cout << "删除元素前" << endl;
for (auto it : mmap)
{
cout << it.first << " " << it.second << endl;
}
//map<string,int>::iterator low = mmap.begin();
auto it = mmap.find("wu");//找到“wu”对应的位置,find函数返回指向“wu”的迭代器
mmap.erase(it,mmap.end());
cout << "删除元素后" << endl;
for (auto it : mmap)
{
cout << it.first << " " << it.second << endl;
}
return 0;
}

  运行结果:元素插入后map容器会对键进行排序,所以插入的元素的顺序并不一定是最终元素在容器中的位置

怎么删除STL容器的元素的更多相关文章

  1. 删除STL容器中的元素

    有关stl容器删除元素的问题,错误的代码如下: std::vector<struct> mFriendList; ... std::vector<struct>::iterat ...

  2. STL容器 erase的使用陷井

    http://www.cppblog.com/beautykingdom/archive/2008/07/09/55760.aspx?opt=admin 在STL(标准模板库)中经常会碰到要删除容器中 ...

  3. 【转】c++中Vector等STL容器的自定义排序

    如果要自己定义STL容器的元素类最好满足STL容器对元素的要求    必须要求:     1.Copy构造函数     2.赋值=操作符     3.能够销毁对象的析构函数    另外:     1. ...

  4. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...

  5. STL—— 容器(vector)元素的删除

    1. clear() 将整个 vector 都删除 使用 vectorname.clear() 可以将整个vector 中的元素全部删除,但是内存不会释放,如下代码: 1 #include <i ...

  6. STL容器的遍历删除

    STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...

  7. STL容器及算法题:删除奇数的QQ号

    最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...

  8. STL容器内数据删除

    STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...

  9. STL——容器(Set & multiset)的删除 erase

    set.clear();             //清除所有元素 set.erase(pos);     //删除pos迭代器所指的元素,返回下一个元素的迭代器. set.erase(beg,end ...

随机推荐

  1. Azure EA (3) 使用Postman访问海外Azure Billing API

    <Windows Azure Platform 系列文章目录> 本文介绍的是海外版的Azure Global服务,因为跨境内境外网络,访问速度会比较慢 在开始使用Azure Billing ...

  2. FFmpeg 常用API

    一.通用API 1.1 av_register_all() 初始化 libavformat 和注册所有的复用器.解复用器和协议处理器.如果不调用这个函数,可以调用下面的三个函数来选择支持的格式. 注册 ...

  3. [线段树]区间修改&区间查询问题

    区间修改&区间查询问题 [引言]信息学奥赛中常见有区间操作问题,这种类型的题目一般数据规模极大,无法用简单的模拟通过,因此本篇论文将讨论关于可以实现区间修改和区间查询的一部分算法的优越与否. ...

  4. Kubernetes 动态PV使用

    Kubernetes 动态PV使用 Kubernetes支持动态供给的存储插件:https://kubernetes.io/docs/concepts/storage/storage-classes/ ...

  5. 【UOJ#388】【UNR#3】配对树(线段树,dsu on tree)

    [UOJ#388][UNR#3]配对树(线段树,dsu on tree) 题面 UOJ 题解 考虑一个固定区间怎么计算答案,把这些点搞下来建树,然后\(dp\),不难发现一个点如果子树内能够匹配的话就 ...

  6. mysql的sql调优: slow_query_log_file

    mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数.如果在my.cnf里面修改,需增加如 ...

  7. 对象数组自定义排序--System.Collections.ArrayList.Sort()

    使用System.Collections.ArrayList.Sort()对象数组自定义排序 其核心为比较器的实现,比较器为一个类,继承了IComparer接口并实现int IComparer.Com ...

  8. [笔记] Git 冲突处理

    这是一篇关于 git 解冲突的笔记,没有什么干货. TortoiseGit 小乌龟 通常情况下,会比较喜欢使用小乌龟解冲突,详见:git 使用 tortoisegit 解冲突 但部分复杂的场景,反而需 ...

  9. C#中一行代码实现18位数字时间戳转换为DateTime

    场景 存取的时间戳数据为: 636728674347302002 怎样将其转换为DateTime时间. 目前大多数的策略是,转换成string,然后 DateTime dateTimeStart = ...

  10. java如何实现webservice中wsdlLocation访问地址的可配置化

    背景:项目中调用了别的系统的webservice接口,调用成功之后发现wsdlLocation的地址是写死的,不方便修改,所以需要实现地址,包括用户名密码的可配置.项目的框架是Spring,调用web ...