在 C++ 中初始化集合的方法2025年2月10日 | 阅读 8 分钟 在 C++ 中,'std::set' 是一个存储元素的容器。当你创建一个 set 时,实际上就是向其中添加元素。C++ 提供了多种初始化 set 的方法,允许你从其他来源或以不同的方式填充它。 正确地初始化一个 set 很重要,因为它能确保 set 保持其排序的特性。在初始化过程中,重复元素会被自动处理。元素会根据其值(如果指定了自定义比较函数,则根据自定义比较函数)按升序排列。 在 C++ 中,有以下几种初始化 set 的方法:
这些初始化方法都有其特定的语法、优点和适用场景。有些方法更适合从零开始初始化一个 set,而另一些方法则更适合向现有 set 添加元素或从其他容器复制元素。 在接下来的章节中,我们将详细探讨每种初始化方法,并提供示例和解释,以帮助你根据具体需求有效地初始化 C++ 中的 set。 1. 默认初始化在 C++ 中,你可以通过使用默认构造函数来创建 set。 语法 示例 输出 The set is empty. 说明
2. 使用初始化列表进行初始化为了创建一个 set,你可以将想要的元素放在花括号 {} 中列出,这称为初始化列表。 语法 请记住,此列表中的元素应该是唯一的,并根据 set 的比较方式进行排序(对于数据类型,通常是升序)。 初始化 set 时,任何重复的项都会被自动删除。 示例 输出 1 2 3 5 8 说明 在给定的实例中,名为 `my_set` 的 set 以包含重复值的列表开始(数字 '8' 出现不止一次)。创建 set 时,它会自动删除这些重复项,并将唯一的元素按升序排列。使用初始化列表可以轻松地设置一个预定义元素的 set。 3. 从另一个容器(例如数组、vector)复制元素进行初始化C++ 中的 set 可以通过从数组或 vector 等其他容器复制元素来初始化。这是通过使用 set 类的范围构造函数或范围插入方法实现的。 从数组初始化 语法 `begin_iter` 和 `end_iter` 是指向数组开始和结束的迭代器。 示例 输出 1 2 3 5 8 说明
从 vector 初始化 在 C++ 中,你可以使用 vector 来创建一个名为 `set_name` 的 set。 语法 `vector.begin()` 和 `vector.end()` 是指向 vector 开始和结束的迭代器。 示例 输出 1 2 3 5 8 说明 在给定的实例中,名为 `my_set` 的 set 是通过复制名为 `vec` 的 vector 中的元素来初始化的。范围构造函数需要两个迭代器,`vec.begin()`(表示 vector 的开始)和 `vec.end()`(表示 vector 的结束),来定义哪些元素将被复制。 当初始化 set 时,它会自动删除任何重复项,并将其余项按升序排列。 当你的数组、vector 或其他容器中存储了大量数据,并且想要创建一个包含该集合中唯一元素的 set 时,通过从另一个容器传输元素来设置 set 会非常方便。 4. 使用复制构造函数从另一个 Set 初始化在 C++ 中,你可以通过复制构造函数来复制另一个 set 的元素来创建 set。此构造函数会生成一个包含从原 set 复制的元素的 set。 语法 示例 输出 1 2 3 5 8 说明 在此示例中,`original_set` 这个 set 包含已有的整数。使用复制构造函数,我们创建了一个名为 `new_set` 的 set,它镜像了 `original_set` 的内容,保持了其顺序和唯一性。当一个 set 使用复制构造函数从另一个 set 初始化时,它会生成该 set 的副本,允许对一个 set 进行修改而不会影响另一个 set。 5. 使用范围构造函数从另一个可迭代数据结构初始化在 C++ 中,你可以使用范围构造函数,通过从数组、vector 或其他容器等数据结构传输项来初始化 set。此构造函数需要两个迭代器:一个指向范围的开始,另一个指向范围的结束。 语法 示例 输出 1 2 3 5 8 6. 插入单个元素在设置好 set 后,你可以选择使用 `insert()` 函数添加元素。此函数会将元素添加到 set 中,除非它已存在。 语法 如果元素已经属于 set,执行 `insert()` 函数不会对其进行更改;相反,迭代器将指向该现有元素。 示例 输出 1 3 5 7 说明 在提供的示例中,我们首先使用元素 {1, 3, 5} 设置 `my_set`。然后,我们使用命令 `my_set.insert(7)` 将数字 7 添加到 set 中。之后,我们尝试通过 `auto iter = my_set.insert(3);` 添加 3。由于 3 已经存在于 set 中,`insert()` 操作不会改变任何内容。它会返回一个指向现有元素 3 的迭代器。`)` 操作的结果是一个 `std::pair`,它包含一个指向已插入元素(如果插入失败则指向现有元素)的迭代器,以及一个布尔值,指示插入是否成功。现在我们可以显示 set 中的元素,包括 {1, 3, 5, 7}。向 set 添加元素在你需要将项添加到已建立的 set 中时非常方便,同时确保每个项都是唯一的并保持排序。 7. 使用初始化列表进行插入
语法 初始化列表中的重复元素在插入时会被自动丢弃。 示例 输出 1 3 5 7 9 11 说明
使用初始化列表插入多个元素非常方便,当你希望在一次操作中将一组预定义元素添加到现有 set 中,同时保持 set 的唯一性和排序特性时。 下一主题使用现代 C++ 避免 bug |
分发饼干问题是一个简单的问题,它专门针对具有稀缺可用资源的资源共享,以满足尽可能多的需求。最初的编码面试问题在应用贪婪算法方面展示了关键原则。在这个问题中,我们...
阅读 10 分钟
确定时钟上时针和分针之间的角度是常见的编程问题,它结合了逻辑和数学。虽然时针每分钟旋转 0.5°,而分针每分钟旋转 6°。C++ 中的目标是预测...
5 分钟阅读
在本文中,我们将讨论 C++ 中的 multimap size() 函数。但在了解 size() 函数之前,我们必须了解 multimap。Multimap 是 C++ 中的一个排序容器,存在于标准模板库中。通常,map 存储键值对...
阅读 3 分钟
C++17 中的 <charconv> 标头文件 <charconv> 标头包含几种将字符序列转换为数值信息以及反之亦然的方法。与相同目的的 <cstdlib> 标头文件函数相比,它被认为更有效。<charconv> 标头文件提供的函数是...
阅读 3 分钟
?列表是 C++ 中的一种容器,它将数据存储在不连续的内存位置。此外,它还有一个常量迭代器,它为其元素提供常量引用。当使用 const_iterator 遍历 C++ 中的列表时,我们必须遍历...
阅读 4 分钟
异字母词(Heterogram)是一个单词、短语或句子,其中每个字母最多使用一次。这是语言学部分的一个好概念,在计算语言学领域和猜谜游戏中将会有很好的应用...
5 分钟阅读
引言:灵活性以及编写高效且富有表现力的代码的能力是 C++ 保持受欢迎的原因之一。使 C++ 更加灵活的一种方法是使用运算符重载,这是一种更高级的功能。除了常见的重载运算符(如 +、-、...)之外。
阅读 8 分钟
众所周知的布尔可满足性(SAT)问题在计算机科学、人工智能和逻辑编程中有许多应用,其中有一个有趣的问题实例,称为 2-SAT 问题,或 2-可满足性问题。SAT 问题的主要目标是确定一个给定的布尔公式是否可以...
11 分钟阅读
在本文中,我们将讨论 C++ 中 Null String 和 Empty String 之间的区别。但在讨论它们的区别之前,我们必须了解 Null String 和 Empty String 及其示例。什么是 Null String?不指定任何内容的指针或……
阅读 4 分钟
引言 数字自古以来就引起数学家和程序员的兴趣。几种有趣的数列之一是十一边形数,它们因其几何意义而闻名。这些数字代表一个 11 边形或一个 11 边的图形(十一边形),并且可以被描述为三角形的推广……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India