C++:不能将 char 数组添加到双端队列?

Posted

技术标签:

【中文标题】C++:不能将 char 数组添加到双端队列?【英文标题】:C++: Can't add a char array to a deque? 【发布时间】:2021-11-20 07:40:33 【问题描述】:

我正在尝试将 char[] 数组添加到双端队列,但是当我执行以下代码时:

#include <iostream>
#include <queue>
#include <deque>
#include <string>
#include <unistd.h>

using namespace std;

int main(int argc, char *argv[])
    deque<char[]> q;
    char buffer[2];
    buffer[0] = 'a';
    buffer[1] = 'b';

    q.push_back(buffer);

    return 0;

我收到以下错误:

test.cpp: In function ‘int main(int, char**)’:
test.cpp:14:23: error: no matching function for call to ‘std::deque<char []>::push_back(char [2])’
   14 |     q.push_back(buffer);

这看起来很奇怪,考虑到我可以将 stringsints 等其他数据类型添加到双端队列就好了。

【问题讨论】:

您希望char[] 是什么? 管理可变长度数组使用std::vector&lt;T&gt; 【参考方案1】:

这似乎很奇怪,考虑到我可以将字符串和整数等其他数据类型添加到双端队列中就好了。

仅仅因为您可以在双端队列中存储某些类型的元素并不一定意味着您可以在双端队列中存储任何类型的元素。元素类型必须满足一些要求。数组不满足这些要求。您不能将数组存储为双端队列的元素。 buffer 是一个数组。它不能是双端队列的元素。

您可以将类实例存储为元素(尽管存在限制)在双端队列中,并且您可以将数组存储为类的成员。因此,您可以将此类数组包装类存储为双端队列的元素。标准库为这种数组包装器提供了一个模板。它被称为std::array。示例:

std::deque<std::array<char, 2>> q;
std::array<char, 2> buffer;
buffer[0] = 'a';
buffer[1] = 'b';

q.push_back(buffer);

附: std::array 是唯一允许将数组存储为元素的标准容器模板。

【讨论】:

【参考方案2】:

如果您想使用可变长度数组,您可以使用内置的 std::vector&lt;T&gt; 类型,就像使用 std::deque&lt;T&gt; 一样:

#include <deque>
#include <vector>

int main(int argc, char *argv[])

    std::deque<std::vector<char>> q;

    std::vector<char> buffer;
    buffer.push_back('a');
    buffer.push_back('b');

    q.push_back(buffer);

    return 0;

【讨论】:

以上是关于C++:不能将 char 数组添加到双端队列?的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题日记之设计循环双端队列

如果边没有按权重排序的顺序插入双端队列,0-1 BFS 会产生正确的答案吗?

LeetCode 641. 设计循环双端队列 / 1656. 设计有序流 / 302. 层数最深叶子节点的和

LeetCode 641. 设计循环双端队列 / 1656. 设计有序流 / 302. 层数最深叶子节点的和

C++ STL 双端队列deque详解

C++初阶----deque(双端队列)+stack queue模拟实现