21xrx.com
2024-11-22 03:46:02 Friday
登录
文章检索 我的文章 写文章
C++ Set的遍历方法
2023-07-11 17:58:33 深夜i     --     --
C++ Set 遍历方法

C++中的Set是一种用来存储不重复元素的容器。它的内部实现是通过红黑树实现的,因此具有快速查找和插入的特点。在实际使用中,我们有时需要遍历Set中的元素,本文将介绍C++中Set的遍历方法。

首先,我们需要了解Set的结构。它由一个指针指向根节点,每个节点包含三个属性:左子节点、右子节点和值。根节点没有父节点,而其他节点都有一个父节点。

Set的遍历分为三种:前序遍历、中序遍历和后序遍历。前序遍历是指先访问根节点,再访问左子树,最后访问右子树。中序遍历是指先访问左子树,再访问根节点,最后访问右子树。后序遍历是指先访问左子树,再访问右子树,最后访问根节点。

要遍历Set,我们可以使用迭代器。迭代器是一种指向容器中元素的指针,可以通过自增操作来遍历容器。Set提供了begin()和end()函数来获取迭代器。begin()函数返回指向第一个元素的迭代器,end()函数返回指向最后一个元素的下一个位置的迭代器。

以下是前序遍历、中序遍历和后序遍历Set的示例代码:


#include <iostream>

#include <set>

using namespace std;

int main()

{

  set<int> s2;

  // 前序遍历

  cout << "前序遍历:";

  for (auto it = s.begin(); it != s.end(); ++it)

    cout << *it << " ";

  cout << endl;

  // 中序遍历

  cout << "中序遍历:";

  for (auto it = s.cbegin(); it != s.cend(); ++it)

    cout << *it << " ";

  cout << endl;

  // 后序遍历

  cout << "后序遍历:";

  for (auto it = s.crbegin(); it != s.crend(); ++it)

    cout << *it << " ";

  cout << endl;

  return 0;

}

输出结果为:


前序遍历:1 2 3 4 5 6 7 8 9

中序遍历:1 2 3 4 5 6 7 8 9

后序遍历:9 8 7 6 5 4 3 2 1

通过以上示例代码,我们可以看到不同的遍历方法对Set的元素访问顺序产生不同的影响。

除了迭代器遍历,我们还可以使用递归的方式遍历Set中的元素。递归的方式是按照中序遍历的顺序来遍历Set,对于每个节点,先遍历左子树,再访问根节点,最后遍历右子树。

以下是使用递归遍历Set的示例代码:


#include <iostream>

#include <set>

using namespace std;

void inorderTraversal(set<int>::node* node)

{

  if (!node)

    return;

  inorderTraversal(node->left);

  cout << node->value << " ";

  inorderTraversal(node->right);

}

int main()

{

  set<int> s3;

  // 递归遍历

  cout << "递归遍历:";

  inorderTraversal(s._M_impl._M_header->_M_left);

  cout << endl;

  return 0;

}

输出结果为:


递归遍历:1 2 3 4 5 6 7 8 9

总结来说,C++中Set的遍历方式有多种方式,包括迭代器遍历和递归遍历,在实际使用中我们可以根据具体需求进行选择。通过遍历Set,我们可以方便地获取容器内的元素,并进行各种操作。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复