📜  C++ STL中的queue :: push()和queue :: pop()(1)

📅  最后修改于: 2023-12-03 15:13:56.662000             🧑  作者: Mango

C++ STL中的queue::push()和queue::pop()

在C++ Standard Library (STL)中,queue是一个基础容器,支持先进先出 (First-In-First-Out, FIFO) 的容器适配器。

queue提供了push()和pop()两个主要函数,用于添加元素到队尾和移除队首元素。在本篇文章中,我们将逐一介绍这两个函数的用法以及它们的实现细节。

queue::push()

queue::push()函数用于将元素添加到队列末尾。

语法:

void push(const value_type& val);

其中,value_type是queue的元素类型,val是要加入队列的元素。

示例代码:

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    queue<int> q;

    q.push(10);
    q.push(20);
    q.push(30);

    while(!q.empty())
    {
        cout << q.front() << endl;
        q.pop();
    }

    return 0;
}

输出:

10
20
30

上述代码中,我们声明了一个queue q,并依次用push()函数将3个整数元素加入队列。然后,我们使用while循环遍历队列中的所有元素,并用front()函数获取队首元素值。最后,我们用pop()函数将队首元素移除,直到队列为空。

queue::pop()

queue::pop()函数用于移除队首元素。

语法:

void pop();

示例代码:

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    queue<int> q;

    q.push(10);
    q.push(20);
    q.push(30);

    cout << "Before pop: " << q.size() << " elements in queue." << endl;

    q.pop();

    cout << "After pop: " << q.size() << " elements in queue." << endl;

    return 0;
}

输出:

Before pop: 3 elements in queue.
After pop: 2 elements in queue.

上述代码中,我们声明了一个queue q,并用push()函数添加了3个整数元素。然后,我们使用size()函数打印队列中的当前元素数量。接下来,我们运行pop()函数,将队首元素10移除。最后,我们再次使用size()函数打印队列中的元素数量,发现队列中只剩下2个元素了。

queue的实现

queue是由deque容器实现的队列适配器。deque是一种双端队列,支持随机访问和在队首和队尾执行快速插入和删除操作。queue在deque容器上提供了一个抽象层,只公开了插入和删除队首元素的push()和pop()函数。

因此,我们可以使用deque容器来手动实现一个类似queue的简单队列,如下所示:

#include <iostream>
#include <deque>
using namespace std;

template<typename T>
class my_queue
{
private:
    deque<T> _data;
public:
    void push(const T& val)
    {
        _data.push_back(val);
    }

    void pop()
    {
        _data.pop_front();
    }

    T& front()
    {
        return _data.front();
    }

    bool empty() const
    {
        return _data.empty();
    }

    int size() const
    {
        return _data.size();
    }
};

int main()
{
    my_queue<int> q;

    q.push(10);
    q.push(20);
    q.push(30);

    while(!q.empty())
    {
        cout << q.front() << endl;
        q.pop();
    }

    return 0;
}

上述代码中,我们使用deque实现了一个简单的队列适配器——my_queue。该类提供了push()、pop()、front()、empty()和size()等常见接口,其中前3个接口与queue一致。我们采用了模板类实现,使得my_queue能够存储不同类型的元素。

可以看出,queue的优点在于提供了简洁明了的接口,简化了队列的使用代码。但如果需要自定义更多队列功能,使用deque手动实现一个类似queue的队列也是一种不错的选择。

总结

通过本篇文章,我们了解了C++ STL的queue容器适配器,学会了使用push()和pop()函数向队列中添加和删除元素,实现了一个简单的queue类似的队列。queue容器具有简单易用的API,可适用于各种FIFO场景,有助于程序员提高开发效率和代码可读性。