C++ 中的双端队列与示例
什么是双端队列?
在 C++ 中,双端队列是一个序列容器,也称为双端队列。顾名思义,双端队列允许从两端插入和删除。虽然双端队列类似于向量,但双端队列比向量更有效。在向量中,可以保证连续的存储分配,但对于双端队列可能并非如此。 Deque 是队列的特例,因为两端都允许插入和删除操作。
与双端队列相关的函数:
- push_front() :用于从前面推送容器中的元素。
- push_back() :用于从后面推送容器中的元素。
- front() :用于引用容器的第一个元素。
- back() :用于引用容器的最后一个元素。
什么是对?
C++ 中的实用程序标头为我们提供了配对容器。一对由两个数据元素或对象组成。
- 第一个元素被称为“第一”,第二个元素被称为“第二”,并且顺序是固定的(第一,第二)。
- Pair 用于将类型可能不同的两个值组合在一起。 Pair 提供了一种将两个异构对象存储为一个单元的方法。
- 可以分配、复制和比较对。在 map 或 hash_map 中分配的对象数组默认为“pair”类型,其中所有“first”元素都是与其“second”值对象关联的唯一键。
要访问元素,我们使用变量名后跟点运算符,然后是关键字 first 或 second。
如何访问一对?
可以使用点 (.)运算符访问对的元素。
句法:
auto fistElement = myPair.first;
auto fistElement = myPair.second;
本文重点介绍创建对的双端队列。
双端队列
对的双端队列是一个双端队列容器,其中每个元素本身就是一对。
句法:
deque
Here,
dataType1 and dataType2 can be either similar or dissimilar data types
示例 1:下面是实现对的双端队列的 C++ 程序。
C++
// C++ program to demonstrate
// the working of deque
// of pairs
#include
using namespace std;
// Function to print deque elements
void print(deque >& myContainer)
{
for (auto currentpair : myContainer)
{
// Each element of the deque is
// a pair itself
pair pr = currentpair;
cout << "[ ";
// Printing pair elements
cout << pr.first << ' ' <<
pr.second;
cout << ']';
cout << '\n';
}
}
// Driver code
int main()
{
// Declaring a deque of pairs
// of type {int, bool}
deque >
myContainer;
// Declaring a pair
pair pair1;
// Initializing the
// pair
pair1 = make_pair(22, false);
// Push the pair at the front
// in the deque
myContainer.push_front(pair1);
// Declaring another pair
pair pair2;
// Initializing the
// pair
pair2 = make_pair(33, true);
// Push the pair at the back
// in the deque
myContainer.push_back(pair2);
// Declaring another pair
pair pair3;
// Initializing the pair
pair3 = make_pair(11, false);
// Push the pair at the front
// in the deque
myContainer.push_front(pair3);
// Declaring another pair
pair pair4;
// Initializing the pair
pair4 = make_pair(44, true);
// Push the pair at the back
// in the deque
myContainer.push_back(pair4);
// Calling print function
print(myContainer);
return 0;
}
C++
// C++ program to demonstrate
// the working of deque
// of pairs
#include
using namespace std;
// Function to print deque elements
void print(deque >& myContainer)
{
for (auto currentpair : myContainer)
{
// Each element of the deque is
// a pair itself
pair pr = currentpair;
cout << "[ ";
// Printing pair elements
cout << pr.first << ' ' <<
pr.second;
cout << ']';
cout << '\n';
}
}
// Driver code
int main()
{
// Declaring a deque of pairs
// of type {string, bool}
deque >
myContainer;
// Declaring a pair
pair pair1;
// Initializing the
// pair
pair1 = make_pair("GeeksforGeeks",
false);
// Push the pair at the front
// in the deque
myContainer.push_front(pair1);
// Declaring another pair
pair pair2;
// Initializing the
// pair
pair2 = make_pair("GFG", true);
// Push the pair at the back
// in the deque
myContainer.push_back(pair2);
// Declaring another pair
pair pair3;
// Initializing the pair
pair3 = make_pair("Java",
false);
// Push the pair at the front
// in the deque
myContainer.push_front(pair3);
// Declaring another pair
pair pair4;
// Initializing the pair
pair4 = make_pair("Python",
true);
// Push the pair at the back
// in the deque
myContainer.push_back(pair4);
// Calling print function
print(myContainer);
return 0;
}
输出
[ 11 0]
[ 22 0]
[ 33 1]
[ 44 1]
示例 2:下面是实现对的双端队列的 C++ 程序。
C++
// C++ program to demonstrate
// the working of deque
// of pairs
#include
using namespace std;
// Function to print deque elements
void print(deque >& myContainer)
{
for (auto currentpair : myContainer)
{
// Each element of the deque is
// a pair itself
pair pr = currentpair;
cout << "[ ";
// Printing pair elements
cout << pr.first << ' ' <<
pr.second;
cout << ']';
cout << '\n';
}
}
// Driver code
int main()
{
// Declaring a deque of pairs
// of type {string, bool}
deque >
myContainer;
// Declaring a pair
pair pair1;
// Initializing the
// pair
pair1 = make_pair("GeeksforGeeks",
false);
// Push the pair at the front
// in the deque
myContainer.push_front(pair1);
// Declaring another pair
pair pair2;
// Initializing the
// pair
pair2 = make_pair("GFG", true);
// Push the pair at the back
// in the deque
myContainer.push_back(pair2);
// Declaring another pair
pair pair3;
// Initializing the pair
pair3 = make_pair("Java",
false);
// Push the pair at the front
// in the deque
myContainer.push_front(pair3);
// Declaring another pair
pair pair4;
// Initializing the pair
pair4 = make_pair("Python",
true);
// Push the pair at the back
// in the deque
myContainer.push_back(pair4);
// Calling print function
print(myContainer);
return 0;
}
输出
[ Java 0]
[ GeeksforGeeks 0]
[ GFG 1]
[ Python 1]