21xrx.com
2024-11-10 00:55:48 Sunday
登录
文章检索 我的文章 写文章
C++如何遍历列表?
2023-06-30 05:50:28 深夜i     --     --
C++ 遍历 列表

在开发C++程序时,常常需要遍历列表(或称为链表)。遍历列表意味着按照特定的顺序遍历列表中的每一个节点。C++提供了多种方法来遍历列表,下面将介绍其中的几种常见方法。

1. 使用指针进行遍历

在C++中,我们可以使用指针访问列表中的每一个节点。我们可以设置一个指向列表头的指针,然后通过将指针指向下一个节点,一直遍历到列表尾。例如以下代码片段展示了如何使用指针遍历一个单向链表。


struct Node {

  int data;

  Node* next;

};

void traverseList(Node* head) {

  Node* current = head;

  while (current != nullptr)

    cout << current->data << " ";

    current = current->next;

  

}

在该代码中,我们定义了一个 `Node` 结构体,其中包含一个 `data` 成员变量和一个指向下一节点的指针 `next`。然后我们定义了一个名为 `traverseList` 的函数,它接受一个指向列表头的指针作为参数,并使用一个名为 `current` 的指针来遍历列表。该函数使用while循环,每次迭代时打印 `current` 节点的值,并将 `current` 指针指向它的下一节点。当 `current` 为空指针时,循环结束。

2. 使用范围for循环

在C++11中,增加了一个范围for循环,可以用来遍历列表。该循环语句不仅限于数组,也适用于许多其他迭代器(包括链表迭代器)。下面的代码展示了如何使用范围for循环遍历一个双向链表。


class Node {

public:

  int data;

  Node* next;

  Node* prev;

};

void traverseList(Node* head) {

  for (Node* current : *head)

    cout << current->data << " ";

  

}

在该代码中,我们定义了一个名为 `Node` 的类,其中包含一个 `data` 成员变量、一个指向下一个节点的指针 `next` 和一个指向前一个节点的指针 `prev`。我们定义了一个名为 `traverseList` 的函数,它接受一个指向列表头的指针作为参数,并使用一个范围for循环遍历列表。该循环会在 `head` 指针指向的双向链表上迭代,对于每一个节点,输出它的 `data` 成员变量的值。

3. 使用STL算法

为了更加简化遍历列表的过程,C++提供了许多STL算法,可以帮助我们轻松地遍历列表。以下代码片段展示了如何使用 `std::for_each` 算法遍历一个单向链表。


struct Node {

  int data;

  Node* next;

};

void processNode(Node* node)

  cout << node->data << " ";

void traverseList(Node* head) {

  std::for_each(head, nullptr, processNode);

}

在该代码中,我们定义了一个名为 `processNode` 的函数,它接受一个指向节点的指针作为参数,并输出该节点的 `data` 成员变量的值。然后我们定义了一个名为 `traverseList` 的函数,它接受一个指向列表头的指针作为参数,并使用 `std::for_each` 算法对列表进行遍历。在该算法内部,我们传递了一个指向 `processNode` 函数的指针,这样算法就会在遍历列表时调用该函数,输出每个节点的 `data` 值。

无论使用哪种方法,遍历列表都是在C++编程中经常遇到的问题。通过使用指针、范围for循环或STL算法,我们可以更加方便地遍历列表,从而极大地提高我们的代码效率。

  
  

评论区

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