在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. cocos2dx 3.17(Windows下) 接入skynet和sprotol

    大致流程一致,但是他的github上的版本,没有Windows的版本.打开他的win的工程会提示缺少一个模块. 本人环境 cocos2dx 3.17.1 当前最新 skynet-无视-当前最新 VS2 ...

  2. vscode10个必装的插件

    VSCode 必装的 10 个高效开发插件   本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创 ...

  3. Redis集群模式介绍

    前言: 一.为什么要使用redis 1,解决应用服务器的cpu和内存压力 2,减少io的读操作,减轻io的压力(内存中读取) 3,关系型数据库扩展性,不强,难以改变表的结构 二.优点 1,nosql数 ...

  4. CompletableFuture1

    public class CompletableFutureTest { public static void main(String[] args) throws Exception { test5 ...

  5. etcd 开启auth认证

    一.概述 1.etcd的v2和v3的认证有些不同,需要分别设置2.Etcd通过用户(user)-角色(role)-权限的方式来控制访问,用户关联角色,角色拥有权限,从而用户也就拥有了相应的权限3.Et ...

  6. java函数式编程的形式

    java中没有真正的函数变量: 一.所有的函数(拉姆达)表达式,都被解释为functional interface @FunctionalInterface interface GreetingSer ...

  7. Kafka学习笔记之Kafka High Availability(上)

    0x00 摘要 Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务.若该Broker永 ...

  8. Docker Hub 使用初探

    Docker Hub 使用初探 —— 魏刘宏 2019.10.26 容器的话题越来越热,今天我也来试试容器的使用,我们以 Docker Hub 为例. Docker Hub 官网为 https://h ...

  9. 安装Redis(Windows版)

    1,GitHub下载地址:https://github.com/MicrosoftArchive/redis/tags 2,进行安装(一直下一步即可) 注:我这里安装的地址是 D:Redis 3,在电 ...

  10. Server2016 IIS安装配置