怎么删除STL容器的元素
在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容器的元素的更多相关文章
- 删除STL容器中的元素
有关stl容器删除元素的问题,错误的代码如下: std::vector<struct> mFriendList; ... std::vector<struct>::iterat ...
- STL容器 erase的使用陷井
http://www.cppblog.com/beautykingdom/archive/2008/07/09/55760.aspx?opt=admin 在STL(标准模板库)中经常会碰到要删除容器中 ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
- STL容器删除元素的陷阱
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...
- STL—— 容器(vector)元素的删除
1. clear() 将整个 vector 都删除 使用 vectorname.clear() 可以将整个vector 中的元素全部删除,但是内存不会释放,如下代码: 1 #include <i ...
- STL容器的遍历删除
STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...
- STL容器及算法题:删除奇数的QQ号
最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...
- STL容器内数据删除
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...
- STL——容器(Set & multiset)的删除 erase
set.clear(); //清除所有元素 set.erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器. set.erase(beg,end ...
随机推荐
- usb设备在sysfs中的命名规范
"root-hub的编号"-"设备(或者hub)插入的端口号"[."设备(或者hub)插入的端口号"]:"USB设备配置号&quo ...
- linux 硬盘满了后,查看使用目录占用空间情况
cd 切换到目录, du -ah --max-depth=1 查看当前目录下的 文件夹 占用情况
- 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?
作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家 导读:近年来,越来越多专门给 Kubernetes 做应用发布的 ...
- GAN简介
GAN Generative Adversarial Networks 生成对抗网络.学习真实世界的真实数据的分布,用于创造以假乱真的数据.比如前段时间很火的应用deep fake.deep nude ...
- IIS Express 启用目录浏览 方法
标签: iis / visual studio / C# / ASP.NET / .NET 522 今天刚刚使用visual studio 2013创建第一个hello world,结果就发现提示错误 ...
- ASP.NET MVC 中枚举生成下拉框
最近公司在开发财务系统,在工作中遇到不少的地方需要下拉框. 但是枚举框中数据的内容又来自枚举. 枚举代码如下: public class EnumDemo { public enum Value { ...
- Lucene BooleanQuery相关算法
BooleanQuery对两种不同查询场景执行不同的算法: 场景1: 所有的子句都必须满足,而且所有的子句里没有嵌套BooleanQuery. 例: a AND b AND c 上面语句表示要同时包含 ...
- JavaScript 数据类型转换表
下表显示了将不同的JavaScript值转换为Number,String和Boolean的结果: 原始值 转换为Number 转换为String 转换为Boolean false 0 "fa ...
- Excel解析工具easyexcel全面探索
1. Excel解析工具easyexcel全面探索 1.1. 简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存.所以阿里人员对它进行了重写从而诞生了eas ...
- Kali无法使用Chrome原因及解决方法
Kali安装好后,默认的浏览器是Firefox-ESR(Extended Support Release 长期支持)版本. 作为Chrome的死忠粉,当然是要下Chrome用用的. 直到我 ...