21xrx.com
2024-11-22 02:42:30 Friday
登录
文章检索 我的文章 写文章
C++中队列的用法详解
2023-07-01 15:58:25 深夜i     --     --
C++ 队列 用法 详解

队列是一种数据结构,它具有先进先出(FIFO)的特性。在C++中,队列是由STL库提供的一个类,通过它可以实现队列数据结构,同时提供了很多有用的方法。

队列的声明

在C++中,队列可以使用STL库中提供的queue类来声明,通过以下代码可以声明一个队列。


queue<int> myQueue;

这里,`int`是队列元素类型,可以根据需要替换为其他类型。

队列的常用方法

STL库中的queue类提供了许多有用的方法,以下是一些常见的方法:

1. push()

`push()`方法将一个元素添加到队列的末尾。例如:


myQueue.push(1);

在这个例子中,数字1被添加到队列的末尾。

2. pop()

`pop()`方法将删除队列中的第一个元素。例如:


myQueue.pop();

在这个例子中,队列中的第一个元素被删除。

3. front()

`front()`方法返回队列的第一个元素。例如:


int firstElement = myQueue.front();

在这个例子中,返回队列的第一个元素,其值为`firstElement`。

4. back()

`back()`方法返回队列的最后一个元素。例如:


int lastElement = myQueue.back();

在这个例子中,返回队列的最后一个元素,其值为`lastElement`。

5. empty()

`empty()`方法返回一个布尔值,表示队列是否为空。例如:


bool isQueueEmpty = myQueue.empty();

在这个例子中,`isQueueEmpty`将设置为`true`或`false`,表示队列是否为空。

队列的完整代码示例

下面是一个展示如何在C++中使用队列实现BFS算法的完整代码示例:


#include <iostream>

#include <queue>

using namespace std;

int main()

{

  //创建一个用于BFS的图

  vector<vector<int>> graph = {

    1,

     2,

    0,

     2

  };

  //使用队列存储BFS过程中的节点

  queue<int> myQueue;

  vector<bool> visited(graph.size(), false);

  int startPoint = 0;

  myQueue.push(startPoint);

  while (!myQueue.empty()) //如果队列不为空

  {

    int cur = myQueue.front(); //获取队列的首个元素

    myQueue.pop(); //弹出队列的首个元素

    visited[cur] = true; //标记节点已被访问

    cout << cur << " "; //打印当前节点

    //将当前节点未访问过的相邻节点添加到队列中

    for (int i = 0; i < graph[cur].size(); ++i)

    {

      if (!visited[graph[cur][i]])

      {

        myQueue.push(graph[cur][i]);

        visited[graph[cur][i]] = true;

      }

    }

  }

  return 0;

}

在这个例子中,我们使用队列来实现BFS(广度优先搜索)算法。可以看到,队列是非常有用的数据结构,尤其适用于一些需要先进先出的场景。

  
  

评论区

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