怎么删除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 ...
随机推荐
- 十二、深入理解Java内存模型
深入理解Java内存模型 [1]CPU和缓存的一致性 我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道.而计算机上面的数据,是存放在主存当 ...
- ThinkPHP框架获取上一条插入语句产生的id
今天在fastAdmin框架想搞一个拖动进行排序的功能 遇到一个问题是权重的字段值一样的话拖动会出bug,所以想让权重字段(weigh)的值等于当前id的值, 搜索看到的方法如下 实际应用的地方,是写 ...
- 转 推荐 33 个 IDEA 最牛配置,写代码太爽了!
本文由 简悦 SimpRead 转码, 原文地址 https://mp.weixin.qq.com/s/neyvJouuG1Rmxn3BwfRXVg 作者:琦彦 blog.csdn.net/fly91 ...
- Django中创建对象的组合
一.问题背景 在Django中一个表可能是多个表共同合成的对象,比如商品表,用户表,用户购买商品的表,就是这种情况,在这中情况下面我们要添加一条记录到用户购买的商品表中我们该如何才做,此时我们需要获取 ...
- 『Exclusive Access 2 dilworth定理 状压dp』
Exclusive Access 2 Description 给出 N 个点M 条边的无向图,定向得到有向无环图,使得最长路最短. N ≤ 15, M ≤ 100 Input Format 第一行一个 ...
- Spring-AOP源码分析随手记(二)
这次来分析下切面的执行过程. 1.怎么看? 怎么开始看源码呢?就直接从被增强的方法调用那里打断点,看看怎么执行的: 然后就来到了这: 2.初步分析 里面有段: if (this.advised.exp ...
- ConsoleColor原来有16种, enumData.GetValue(i)
Console.WriteLine("Name:{0},Value:{0:D}", enumData.GetValue(i)); Name:Black,Value:0Name:Da ...
- Tp5.1开发初入门
今天需要给金融部门那边做一个信用卡的推广页面,他们系统是用PHP的tp框架做的.我记得最早做tp还是2的时候,和现在的5.1相差太大了,中间开发的时候,还是遇到了点问题.所以,把今天的问题记录下,作个 ...
- 快速上手Mac效率神器Alfred以及Alfred常用操作
前言 Alfred,想必大家就算没用过也耳闻过.Alfred是一个让你可以丢掉鼠标的神器.很多读者可能之前认为Alfred的学习成本高,或者感觉它太复杂,而望之却步.其实Alfred并非高不可攀,本文 ...
- maven 学习---Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...