C++ 中如何使用 const_iterator 遍历 set?

2025 年 5 月 12 日 | 阅读 4 分钟

在本文中,我们将讨论如何在 C++ 中使用 const_iterator 遍历 set。在深入实现之前,我们必须了解 C++ 中的 set。

什么是 Set?

C++ 中的 标准模板库 (STL) 容器 std::set 显示了一个已排序的不同元素的集合。set 的内部比较对象(类型为 Compare)始终指示一个严格弱排序标准,set 中的成员必须始终按照该标准排序。它表示元素默认按升序排序。

通常,std::set 函数实现为红黑树或其他平衡二叉搜索树。这种实现支持大多数操作的对数时间复杂度,包括查找、插入和删除。

如果我们尝试引入一个已存在于 set 中的元素,插入过程将不成功,因为 set 中的每个元素都必须是唯一的。

例如

考虑以下离散数字:{5, 2, 8, 3, 1}。在 C++ 中,std::set 的各个部分会自动按升序排序。因此,set 的内部顺序将是:{1, 2, 3, 5, 8}。

set 只包含唯一项,因此如果我们尝试查找一个已存在于 set 中的数字,它将不会再次添加。例如,尝试重新加载 3,因为 set 中已经有 3,这将不会改变 set。

示例

让我们举一个例子来说明 C++ 中的 set。

输出

How to Traverse a Set with const_iterator in C++?

什么是 C++ 中的 Const_iterator?

const_iterator 是一种迭代器,用于在 C++ 中遍历容器(例如 std::vector、std::list 或 std::set),但不允许迭代器修改项。它用于以只读方式遍历容器的元素。

示例

让我们举一个例子来说明 C++ 中的 const_iterator。

输出

How to Traverse a Set with const_iterator in C++?

使用 const_iterator 遍历 Set

const_iterator 提供容器对象的常量引用。这意味着我们无法更改值,但我们可以访问它。它有助于处理遍历期间可能发生的意外更改。

std::set 类的四个函数返回常量迭代器

  • std::set::cbegin():此函数提供一个 const 迭代器,用于标识 set 的起始元素。
  • std::set::cend():此函数返回一个 const 迭代器,指向 set 的最后一个元素之后。
  • std::set::crbegin():此函数返回一个 const 反向迭代器,指向 set 的反向第一个(或最后一个)元素。
  • std::set::crend():此函数返回一个 const 反向迭代器,它指向 set 的第一个元素之后,即最后一个元素之后。

伪代码

  1. 首先,创建一个包含一些元素的 std::set<int> mySet。
  2. 之后,在 mySet 的开头获取一个 const_iterator。
  3. 使用 const_iterator 遍历 set
    1. 当 const_iterator 未到达 set 的末尾时
      1. 使用 * 访问 const_iterator 指向的元素。
      2. 对元素执行任何所需的操作。
      3. 递增 const_iterator 以移动到 set 中的下一个元素。
  4. 遍历结束。

示例 1

输出

How to Traverse a Set with const_iterator in C++?

示例 2

输出

How to Traverse a Set with const_iterator in C++?