”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么在 C++ 中 `std::remove` 会重新排列元素而不是删除它们?

为什么在 C++ 中 `std::remove` 会重新排列元素而不是删除它们?

发布于2024-11-19
浏览:571

  Why Does `std::remove` Rearrange Elements Instead of Deleting Them in C  ?

理解差异:擦除与删除

在 C 编程领域,std::erase 和 std::remove 是两个在修改容器时,不同的功能有不同的用途。虽然这两个函数都可用于从容器中删除元素,但它们的行为有所不同。

Std::remove:重新排列元素与删除

Std::删除是一种对一系列元素进行操作并在容器内重新排列它们的算法。它不会直接删除任何元素,而是将不匹配的元素移动到匹配的元素之上。此过程在序列的开头创建匹配元素的簇,在序列末尾创建不匹配元素的簇。

Std::erase:删除元素

上另一方面,std::erase 是一个从容器中删除指定元素的函数,从而有效地减小其大小。它采用一系列迭代器作为参数,并删除该范围内的所有元素,包括标记为删除的元素。

理解输出

在提供的代码示例中,可以进行以下观察:

  1. Std::remove: 当 std::remove 不使用时std::erase,它只是重新排列元素,保持向量的大小不变。因此,迭代向量将导致输出 2,2.
  2. Std::erase: 当 std::erase 与 std::remove 结合使用时,它会删除匹配元素(在本例中为 1 的单次出现)并相应地更新向量的大小。因此,输出仅显示 2.

Std::remove

  1. Erase-Remove 之外的使用的附加说明习惯用法: 虽然 std::remove 通常与擦除一起使用作为“擦除删除习惯用法”的一部分,但也可以使用它独立。它在删除顺序并不重要且主要目标是分离容器内匹配和不匹配元素的场景中非常有用。
  2. 非删除的基本原理: 的设计std::remove 不涉及删除源于它能够与任意前向迭代器一起使用。此类迭代器可能无法删除元素,因此 std::remove.
的功能有限
最新教程 更多>
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-20
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-20
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-20
  • 为什么 Goroutine 在 Windows 上有时会执行失败?
    为什么 Goroutine 在 Windows 上有时会执行失败?
    理解 Windows 上非功能性 Goroutines 之谜在并发领域,Goroutines 在 Go 中充当轻量级线程。然而,一些程序员遇到了意想不到的挑战:goroutines 无法在 Windows 上执行。为了解开这个谜团,让我们深入研究一下根本问题。根本原因:异步执行与传统线程不同,gor...
    编程 发布于2024-11-20
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-20
  • 除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-19
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-19
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-11-19
  • 如何使用 PHP 高效地将大型 MySQL 文件导入共享主机?
    如何使用 PHP 高效地将大型 MySQL 文件导入共享主机?
    PHP 中高效的 MySQL 文件导入:共享主机的拆分查询在 Web 开发领域,通常需要在使用共享主机提供商时导入大型数据库文件出现。不幸的是,通过命令行访问 MySQL 可能会受到限制,因此需要一个基于 PHP 的解决方案来解析和执行查询。为了解决这一挑战,开发了一个名为 SplitSQL() 的...
    编程 发布于2024-11-19
  • 可以仅使用 CSS 将图像大小调整为其大小的百分比吗?
    可以仅使用 CSS 将图像大小调整为其大小的百分比吗?
    仅使用 CSS 将图像大小调整为自身的百分比在网页设计领域,需要将图像大小调整为特定尺寸经常出现。一种场景涉及将图像的大小减小到其原始大小的一定百分比,而不改变其容器元素的大小。虽然 JavaScript 或服务器端脚本提供了解决方案,但本文探讨了潜在的纯 CSS 替代方案。是否可以使用 CSS 百...
    编程 发布于2024-11-19
  • 何时为 JavaScript 继承选择 Object.create 而不是 new?
    何时为 JavaScript 继承选择 Object.create 而不是 new?
    JavaScript 继承:Object.create 与 newJavaScript 中的继承概念可能会令人困惑,因为有多种实现方法它。本文旨在阐明最受接受的方法,并为您的特定场景提供解决方案。理解 Object.create 和 newObject.create 是一个创建对象的方法通过从现有对...
    编程 发布于2024-11-19
  • Bootstrap 网格类(如 col-md-4、col-xs-1 和 col-lg-2)中的数字如何确定元素宽度和响应能力?
    Bootstrap 网格类(如 col-md-4、col-xs-1 和 col-lg-2)中的数字如何确定元素宽度和响应能力?
    理解 Bootstrap 网格类中的数字:col-md-4、col-xs-1、col-lg-2The Bootstrap 框架引入了强大的网格系统,有助于创建响应式布局。该系统的组成部分是具有 col-* 格式的类,其中星号代表数字。这些数字在确定网格内的元素如何对齐以及它们如何响应不同的屏幕尺寸方...
    编程 发布于2024-11-19
  • 如何确定 C++ 编译器是否符合 IEEE 754 浮点标准?
    如何确定 C++ 编译器是否符合 IEEE 754 浮点标准?
    检查 C 中的 IEEE 754 浮点标准 确定 C 编译器是否遵循 IEEE 754 浮点标准通常通过以下方式完成编译器定义。然而,用于 C 的技术可能并不直接适用于 C 。C 特定方法幸运的是,C 提供了一种简单的方法来使用 numeric_limits 完成此检查class:std::nume...
    编程 发布于2024-11-19
  • 如何使用 SHA-256 在 Java 中实现安全字符串哈希?
    如何使用 SHA-256 在 Java 中实现安全字符串哈希?
    使用 SHA-256 的 Java 哈希字符串在 Java 中使用 SHA-256 哈希字符串可能看起来是一个简单的任务,但是有散列和编码之间的关键区别需要澄清。SHA-256(安全散列算法-256)是不是编码机制;它是一种单向哈希函数。这意味着当您对字符串进行哈希处理时,您会生成不可逆的二进制数据...
    编程 发布于2024-11-19
  • 如何使用 CSS 替换已弃用的 HTML5 表格属性?
    如何使用 CSS 替换已弃用的 HTML5 表格属性?
    HTML5 表格属性:弃用和 CSS 替换HTML5 中已弃用一些常用来设置 HTML 表格样式的属性,包括 cellpadding 、单元格间距、valign 和对齐。进行此更改是为了实现 Web 开发现代化并促进更严格地遵守 HTML5 标准。在 Visual Studio 中,您可能会收到警告...
    编程 发布于2024-11-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3