std::set 的删元素 c++

2023-11-01

程序演示std::set的删除操作

set类模板中,它和vector,list不同。set,map都是关联式容易。set 内部是基于红黑树实现的。插入和删除操作效率比较高。

下面测试一下怎么删除set的里面的元素。

#include<iostream>
#include<set>

void DeleteElement(std::set<int>& vec)
{
	std::set<int>::iterator iter = vec.begin();
	while(iter != vec.end())
	{
		if(*iter <= 2)
			vec.erase(iter++);
		else
			iter++;
	}
}

void PrintSetVec(const std::set<int>& vec)
{
	std::set<int>::iterator iter = vec.begin();
	for(; iter != vec.end(); ++iter)
	{
		std::cerr << *iter << " ";
	}
	std::cerr << std::endl;
}


int main(int argc, char** argv)
{
	std::set<int> vec;
	vec.insert(0);
	vec.insert(1);
	vec.insert(2);
	vec.insert(3);
	vec.insert(4);
	std::set<int>::iterator iter = vec.begin();
	while(iter != vec.end())
	{
		std::cerr << *iter << std::endl;
		iter = vec.erase(iter);
	}
	return 0;
}

其中DeleteElement删除其中的元素。使用的vec.erase(iter++);删除后,iter的迭代器必须指向下一个元素。测试的结果如下:
在这里插入图片描述

删除了小于3的元素。

也可以使用其它方法,因为使用vec.erase(iter)会返回一个值,它是指向下一个元素的迭代器。因此删除元素可以使用下面方法。

#include<iostream>
#include<set>

void DeleteElementNew(std::set<int>& vec)
{
	std::set<int>::iterator iter = vec.begin();
	while(iter != vec.end())
	{
		if(*iter <= 3)
			iter = vec.erase(iter);
		else
			iter++;
	}
}

void PrintSetVec(const std::set<int>& vec)
{
	std::set<int>::iterator iter = vec.begin();
	for(; iter != vec.end(); ++iter)
	{
		std::cerr << *iter << " ";
	}
	std::cerr << std::endl;
}

int main(int argc, char** argv)
{
	std::set<int> vec;
	vec.insert(0);
	vec.insert(1);
	vec.insert(2);
	vec.insert(3);
	vec.insert(4);

	PrintSetVec(vec);
	DeleteElementNew(vec);
	PrintSetVec(vec);

	return 0;
}

使用上述的方法,删除元素小于4的元素。得到结果如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::set 的删元素 c++ 的相关文章

随机推荐

  • 使用redis做消息队列

    文章目录 前言 代码展示 前言 目前项目中有一项耗时操作 使用华为OBS做文件存储服务 有点类似minio 使用永中做在线预览 读取OBS中的office类文件 因为现在架构里并没有集成mq 所以使用redis做消息队列 代码展示 定时消费
  • Python_类的组合

    A类与B类之间没有共同点 但是A类与B类之间有关联 比如说 医院类与患者类是两个完全不同的类 他们之间没有任何关联 但是患者是属于医院的 此时我们就要用到类的组合来关联医院类与患者类 详细操作详见下图 该部分代码为 class Hospit
  • Qt QTableWidget 样式表

    QHeaderView QTableWidget 标题头整个区域 background transparent 整个标题头区域背景色 QHeaderView section 标题头 每个单独的标题区域 font size 14px 每个标题
  • IDEA 配置Tomact服务器

    1 下载zip版的Tomcat 6 并解压 2 在IDEA中配置Tomcat 6 在idea中的Settings Ctrl Alt s 或者点击图标 弹出窗口左上过滤栏中输入 Application 选择结果中的 Application S
  • 嵌入式视觉将成为划时代的产品

    随着PC 手机和互动游戏的出现 电脑视觉才走进消费性电子产品而为普通大众所熟悉 最近几年AI和微处理器的发展 更是极大地推动了电脑视觉在各个应用领域的发展 尤其是嵌入式视觉 Embedded Vision 引起了业界的特别关注 HAL 90
  • tflearn教程_环境部署——Windows下安装配置tensorflow和tflearn

    原标题 环境部署 Windows下安装配置tensorflow和tflearn 本例依赖Windows 7 x64位系统 由于Tensorflow依赖于Python 以及大量的相关依赖包 为了免除大量依赖包的安装 选择安装Anaconda集
  • visio的使用技巧

    一 调节箭头方向 1 打开你要修改的Microsoft Visio文件 2 选中你要修改的箭头 在上方的开始工具栏中找到 线条 选项 鼠标左键单击打开 3 在下面找到 箭头 这个选项 鼠标移到上面去 就会展开 带阴影的就是你现在用的箭头 如
  • 向上汇报工作,需要注意哪些事项?

    导言 向上级汇报工作是每个员工必须面对的重要任务之一 良好的向上汇报可以提高上级对工作的了解和认可 促进组织的顺利发展 本文将分享一些成功向上汇报工作的关键事项 以助您在向上级汇报时取得更好的效果 一 明确目标和观众 在向上级汇报工作之前
  • java——spring boot集成RabbitMQ——高级特效——封装消息的元数据

    交换机和队列支持持久化 现在我们也需要给消息设计元数据 DeliveryMode 设置为2 表示支持消息的持久化 接上一边博文 修改文件 发送者 package org example sender import org springfra
  • JSP页面报错,将jsp-api.jar加入到类路径

    将jsp api jar加入到类路径
  • OpenCV-Python实战(19)——OpenCV与深度学习的碰撞

    OpenCV Python实战 19 OpenCV与深度学习的碰撞 0 前言 1 cv2 dnn blobFromImage 函数详解 2 OpenCV DNN 人脸检测器 3 OpenCV 图像分类 3 1 使用 AlexNet 进行图像
  • 根据进程id获得本地Java应用的JMX 属性

    1 Getting the Service URL When the local management agent is started it publishes the service URL which also contains th
  • Python,OpenCV中的光学字符识别OCR文章汇总

    Python OpenCV中的光学字符识别OCR文章汇总 Python OpenCV中的光学字符识别 OCR Optical Character Recognition 使用Python OpenCV OCR检测护照图像中的机器可读区域 M
  • vue 项目报错 There are multiple modules with names that only differ in casing.

    错误原因 一般原因就是路径名 的大小写没有统一 因为 windows 下 路径不区分大小写 但是 其他系统 可能就区分了 那么就会报错了 错误现象 There are multiple modules with names that onl
  • java bean的引用_JavaBean的详细及引用

    1 JavaBean实际是具有统一接口格式的java类 2 JavaBean的组成 属性 Properties 方法 Method 事件 Events 3 一个JavaBean的例子 该例子是用的Simple属性 我遵循的习惯是类名大写 包
  • 测牛学堂:软件测试要掌握的sql之命令行必会知识总结(5)

    删除数据库表的操作 drop table if exists xxx 表示当xxx表存在的时候才会执行删除操作 drop table students drop table if exists students 表中插入数据的操作 1 全部
  • Linux多线程编程初探

    Linux线程介绍 进程与线程 典型的UNIX Linux进程可以看成只有一个控制线程 一个进程在同一时刻只做一件事情 有了多个控制线程后 在程序设计时可以把进程设计成在同一时刻做不止一件事 每个线程各自处理独立的任务 进程是程序执行时的一
  • SpringBoot原理概述

    文章目录 一 SpringBoot概述 二 运行原理剖析 1 核心运行原理 Pom xml 主启动类 2 构造流程分析 3 运行流程分析 三 配置与使用 1 配置文件 2 自动配置原理 四 趣味练习 自定义starter 一 SpringB
  • SQL 列转行

    https blog csdn net vipxiaotian article details 4409423 普通行列转换 爱新觉罗 毓华 2007 11 18于海南三亚 假设有张学生成绩表 tb 如下 Name Subject Resu
  • std::set 的删元素 c++

    程序演示std set的删除操作 set类模板中 它和vector list不同 set map都是关联式容易 set 内部是基于红黑树实现的 插入和删除操作效率比较高 下面测试一下怎么删除set的里面的元素 include