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
算法
- 使用empace_back()函数将元素添加到deque
- 检查deque是否为空,如果不为空,则将back值添加到初始化为0的sum变量中,并弹出back元素。
- 重复此步骤,直到deque变为空。
- 打印变量的最终值。
// 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> 中存在 |