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

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

Deque 或双端队列是一种序列容器,具有两端的扩展和收缩特性。它们类似于向量,但在插入和删除元素时更高效,特别是在末尾和开头。和向量不同,可能无法保证连续的存储分配。

deque::emplace_front()

此函数用于将新元素插入到 deque 容器中,新元素添加到 deque 开头。

语法:

dequename.emplace_front(value)
参数 :
要插入到 deque 中的元素作为参数传递。
结果 :
参数被添加到deque 开头。

示例:

Input  : mydeque{1, 2, 3, 4, 5};
         mydeque.emplace_front(6);
Output : mydeque = 6, 1, 2, 3, 4, 5

Input  : mydeque{};
         mydeque.emplace_front(4);
Output : mydeque = 4

错误和异常 1. 它具有强异常保证,因此如果抛出异常,则不会进行任何更改。 2. 参数应该与容器的类型相同,否则将抛出错误。

// 整型 deque 示例
// CPP 程序说明
// 实现 emplace_front() 函数
#include <deque>
#include <iostream>
using namespace std;
 
int main()
{
    deque<int> mydeque;
    mydeque.emplace_front(1);
    mydeque.emplace_front(2);
    mydeque.emplace_front(3);
    mydeque.emplace_front(4);
    mydeque.emplace_front(5);
    mydeque.emplace_front(6);
 
    // deque 变成 6, 5, 4, 3, 2, 1
 
    // 打印 deque
    for (auto it = mydeque.begin();
         it != mydeque.end(); ++it)
        cout << ' ' << *it;
 
    return 0;
} 

输出:

6 5 4 3 2 1
// 字符串 deque 示例
// CPP 程序说明
// 实现 emplace_front() 函数
#include <deque>
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    deque<string> mydeque;
    mydeque.emplace_front("portal");
    mydeque.emplace_front("science");
    mydeque.emplace_front("computer");
    mydeque.emplace_front("a");
    mydeque.emplace_front("is");
    mydeque.emplace_front("GEEKSFORGEEKS");
 
    // deque 变成 GEEKSFORGEEKS, is, a,
    // computer, science, portal
 
    // 打印 deque
    for (auto it = mydeque.begin();
                  it != mydeque.end(); ++it)
        cout << ' ' << *it;
 
    return 0;
}

输出:

GEEKSFORGEEKS is a computer science portal

时间复杂度 : O(1) 应用 给一个空的 deque,使用 emplace_front() 函数添加整数,然后计算它的大小而不使用 size() 函数。

Input  : 1, 2, 3, 4,5, 6
Output : 6

算法 1. 使用 emplace_front() 函数将元素添加到 deque 中 2. 检查 deque 是否为空,如果不是,将初始化为 0 的计数器变量递增,并弹出后一个元素。 3. 重复此步骤,直到 deque 变为空。 4. 打印变量的最终值。

// CPP程序,演示emplace_front()函数的应用
#include <deque>
#include <iostream>
using namespace std;

int main()
{
    // 变量声明
    int count = 0;

    // deque声明
    deque<int> mydeque;

    // 将元素添加到deque
    mydeque.emplace_front(1);
    mydeque.emplace_front(2);
    mydeque.emplace_front(3);
    mydeque.emplace_front(4);
    mydeque.emplace_front(5);
    mydeque.emplace_front(6);

    // 计算deque中的元素数量
    while (!mydeque.empty()) {
        count++;
        mydeque.pop_back();
    }
    cout << count;
    return 0;
}

输出:

6

deque::emplace_back()

该函数用于将新元素插入到deque容器中,新元素添加到deque的末尾。

语法:

dequename.emplace_back(value)
参数:
要插入到deque中的元素作为参数传递。
结果:
参数添加到deque的末尾。

示例:

输入:mydeque{1, 2, 3, 4, 5};
         mydeque.emplace_back(6);
输出:mydeque = 1, 2, 3, 4, 5, 6

输入:mydeque{};
         mydeque.emplace_back(4);
输出:mydeque = 4

错误和异常

1.具有强异常保证,因此,如果抛出异常,则不会进行任何更改。2.参数应与容器的类型相同,否则会引发错误。

// 整数deque示例
//CPP程序,演示emplace_back()函数的实现
#include <deque>
#include <iostream>
using namespace std;

int main()
{
    deque<int> mydeque;
    mydeque.emplace_back(1);
    mydeque.emplace_back(2);
    mydeque.emplace_back(3);
    mydeque.emplace_back(4);
    mydeque.emplace_back(5);
    mydeque.emplace_back(6);
    // deque变为1, 2, 3, 4, 5, 6

    // 打印deque
    for (auto it = mydeque.begin();
             it != mydeque.end(); ++it)
        cout << ' ' << *it;

    return 0;
} 

输出:

1 2 3 4 5 6
// 字符串deque示例
// CPP程序,演示emplace_back()函数的实现
#include <deque>
#include <iostream>
using namespace std;

int main()
{
    deque<string> mydeque;
    mydeque.emplace_back("Hi");
    mydeque.emplace_back("this");
    mydeque.emplace_back("is");
    mydeque.emplace_back("geeksforgeeks");
    // deque变为Hi this is geeksforgeeks

    // 打印deque
    for (auto it = mydeque.begin();
                it != mydeque.end(); ++it)
        cout << ' ' << *it;

    return 0;
}

输出:

Hi this is geeksforgeeks

时间复杂度:

O(1)

应用

给定空的deque,使用emplace_front()函数添加整数,然后计算元素的总和。

输入:4, 5, 9, 2, 6
输出:
26

算法

  1. 使用empace_back()函数将元素添加到deque
  2. 检查deque是否为空,如果不为空,则将back值添加到初始化为0的sum变量中,并弹出back元素。
  3. 重复此步骤,直到deque变为空。
  4. 打印变量的最终值。
// CPP程序,演示
// emplace_back()函数的应用
# include <deque>
# include <iostream>
using namespace std;
 
int main()
{
    // 变量声明
    int sum = 0;
 
    // deque声明
    deque<int> mydeque;
 
    // 添加元素到deque
    mydeque.emplace_back(4);
    mydeque.emplace_back(5);
    mydeque.emplace_back(9);
    mydeque.emplace_back(2);
    mydeque.emplace_back(6);
 
    // 计算deque中元素的总和
    while (!mydeque.empty()) {
        sum = sum + mydeque.back();
        mydeque.pop_back();
    }
    cout << sum;
    return 0;
} 

输出:

6

时间复杂度: O(n),//n为deque中的元素数。

辅助空间: O(n)。

让我们以表格形式看看它们的差异-:

ID deque::emplace_front() deque::emplace_back()
1. 它用于在deque的开头插入新元素 它用于在deque的结尾插入新元素
2. 它的语法是-:emplace_front(Args&&… args); 它的语法是-:emplace_back(Args&&… args);
3. 它没有任何返回值。 它没有任何返回值。
4. 它的复杂度是常数。 它的复杂度是常数。
5. 它在头文件<deque>中存在 它在头文件<deque>中存在

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程