📜  C++ STL中的queue :: emplace()(1)

📅  最后修改于: 2023-12-03 14:59:46.701000             🧑  作者: Mango

C++ STL中的queue :: emplace()

在C++ STL中,queue是一个容器适配器,它是基于其它容器实现的,比如vector、deque等。queue支持FIFO(first-in-first-out)的元素访问方式,即最先放进去的元素最先被访问。queue中的元素只能从队尾入队,从队首出队。queue提供了多个操作函数,其中一个很特别的函数是emplace(),本文将主要介绍queue::emplace()。

queue::emplace()简介

queue::emplace()函数可以通过构造函数参数创建一个新元素并将其添加到队列的末尾。相比于push()函数,emplace()函数实现的是在队列栈顶生成新元素,而不是生成一个元素然后将其移动到队列栈顶 。emplace函数参数直接构造元素,无需发生任何复制语句,因此,建议使用emplace而不是push。

以下是 emplace() 的语法:

queue_name.emplace(args)

参数:

  • args: 元素构造函数参数。
  • queue_name: 队列名称。

返回值:

queue::emplace()代码示例

下面是一个enqueue()和emplace()的代码示例,它打印出了queue的元素个数,以及每个元素的值。enqueue向队列添加一个元素,然后emplace通过构造函数向队列添加一个元素。

#include <iostream>
#include <queue>

using namespace std;

int main() {
    queue<int> myqueue;

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

    cout << "myqueue contains " << myqueue.size() << " element(s):";
    while (!myqueue.empty()) {
        cout << ' ' << myqueue.front();
        myqueue.pop();
    }
    cout << '\n';

    myqueue.emplace(10);
    myqueue.emplace(20);
    myqueue.emplace(30);

    cout << "myqueue contains " << myqueue.size() << " element(s):";
    while (!myqueue.empty()) {
        cout << ' ' << myqueue.front();
        myqueue.pop();
    }
    cout << '\n';

    return 0;
}

输出结果:

myqueue contains 3 element(s): 10 20 30
myqueue contains 3 element(s): 10 20 30

注意:emplace()操作后,我的queue的元素等于添加的相同个数。在这个示例中,我们添加了三个元素,所以队列myqueue有三个元素。

总结

queue::emplace() 函数非常方便,可以直接向queue中添加元素,无需新建一个对象,再添加到队列中,使得整个程序更加高效。在已经使用C++11的情况下,更应该使用emplace代替push操作。