Debugging a DEQUE of char[4][4]

Debugging a DEQUE of char[4][4]

本文关键字:char of DEQUE Debugging      更新时间:2023-10-16

在下面的代码中,我不能在deque中推送初始表,也不能在值x中分配deque的前面。

有人能告诉我怎么修吗?

为了让这个程序正常工作,我应该使用什么来代替char数组?

#include <iostream>
#include <deque>
using namespace std;
char x[4][4];
deque<char [4][4]> myStack;
char func(char initial[4][4])
{
     myStack.push_front(initial[4][4]); // ERROR1
     x[4][4]=myStack.front();            // ERROR2
}

试图编译以上内容会产生错误:

ERROR1:重载函数"std::deque<_Ty, _Ax>::push_front [with _Ty=char [4][4], _Ax=std::allocator<char [4][4]>]"的实例与参数列表不匹配

ERROR2:不能将"char (*)[4]"类型的值分配给"char"类型的实体

不能将C样式数组存储在容器中。

C风格的数组不是C或C++中的第一类公民。它们无法复制,因此不能将数组放入容器中。

一种可能的解决方案是将数组存储在结构中,然后将结构存储在deque中。另一个想法是使用std::string而不是char数组。

使用数组的方式存在一些问题。

  1. 程序中的数组不称为initial[4][4]x[4][4]。它们被称为initialx
  2. 数组不能按值传递到函数中
  3. 数组不能存储在标准容器中

作为初始修复,您可以使用类型boost::array<boost::array<char, 4>, 4>;由于它是一个围绕数组的对象包装器,所以这将起作用。然而,我突然意识到,将多维数组存储在容器中可能是错误的;根据您的要求,您希望做其他事情。不幸的是,我们不知道你的要求是什么,所以我不能提出具体的替代方案。

此外,将deque称为myStack是非常令人困惑的。堆叠是另一回事。