【问题标题】:C++: Can't add a char array to a deque?C++:不能将 char 数组添加到双端队列?
【发布时间】: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;

标签: c++ data-structures std deque


【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 2019-01-02
      • 2017-07-03
      • 1970-01-01
      相关资源
      最近更新 更多