📜  C++ STL中的deque :: emplace_front()和deque :: emplace_back()(1)

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

C++ STL中的deque::emplace_front()和deque::emplace_back()

在C++ STL中,deque是一种双端队列(double-ended queue),它支持在队头和队尾进行元素的插入和删除操作。而其中的emplace_front()emplace_back()两个函数可以让我们在不使用临时对象的情况下,在队头和队尾直接构造新元素。

1. deque::emplace_front()

emplace_front()函数可以在deque的头部插入一个新元素,并直接进行构造。它的函数原型如下:

template< class... Args >
reference emplace_front( Args&&... args );

其中,Args是可变参数模板(variadic templates),它允许我们构造可以接受任意个数参数的元素。而emplace_front()函数则会将这些参数直接传递给元素的构造函数,并返回一个指向这个新元素的引用。

接下来是一个示例程序,演示如何使用emplace_front()函数在deque的头部插入新元素:

#include <iostream>
#include <deque>

using namespace std;

int main()
{
    deque<int> myDeque = { 1, 2, 3 };

    // 使用emplace_front()插入新元素
    myDeque.emplace_front(0);

    // 输出所有元素
    for (auto& element : myDeque)
        cout << element << " ";

    return 0;
}

上述程序的输出结果为:

0 1 2 3

当我们调用emplace_front()函数时,它会直接将参数0传递给int类型的构造函数,并在myDeque的头部插入一个新元素0

需要注意的是,emplace_front()函数只是把元素放入deque中,并不会返回新的元素,而是返回一个指向刚刚插入的元素的引用。

2. deque::emplace_back()

emplace_back()函数则允许我们在deque的尾部插入新元素,它的函数原型也和emplace_front()类似:

template< class... Args >
reference emplace_back( Args&&... args );

接下来是一个示例程序,演示如何使用emplace_back()函数在deque的尾部插入新元素:

#include <iostream>
#include <deque>

using namespace std;

int main()
{
    deque<int> myDeque = { 1, 2, 3 };

    // 使用emplace_back()插入新元素
    myDeque.emplace_back(4);

    // 输出所有元素
    for (auto& element : myDeque)
        cout << element << " ";

    return 0;
}

上述程序的输出结果为:

1 2 3 4

当我们调用emplace_back()函数时,它会直接将参数4传递给int类型的构造函数,并在myDeque的尾部插入一个新元素4

同样地,emplace_back()函数也只会返回一个指向刚刚插入的元素的引用。

总结

deque是一种非常有用的容器,而其中的emplace_front()emplace_back()函数更是为我们提供了一种方便快捷的方式,在队头和队尾直接构造新元素。当我们需要频繁地对deque进行大量的头部或尾部插入操作时,就可以选择使用emplace_front()emplace_back()函数,并避免使用临时对象带来的额外花费。