在 C++ 中重新分配多维数组

Reassigning a multidimensional array in C++

本文关键字:分配 数组 C++ 新分配      更新时间:2023-10-16

我正在创建一个函数,该函数将获取一个char参数并将其转换为bool[8][8]数组。这是我的函数现在的样子:

void DotMatrix::displayCharacter(char c, bool doScrolling, int milliseconds){
bool pixelMap[8][8];
if (c == 'A'){
    pixelMap = {
        {0,0,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,1,1,1,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0}
    };
} else if (c == 'B'){
    pixelMap = {
        {0,1,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,1,1,1,0,0,0}
    };
} else if (c == 'C'){
    pixelMap = {
        {0,0,0,1,1,0,0,0},
        {0,0,1,0,0,1,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,0,1,0,0,1,0,0},
        {0,0,0,1,1,0,0,0}
    };
} else if (c == 'D'){
    pixelMap = {
        {0,1,1,1,0,0,0,0},
        {0,1,0,0,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,1,0,0,0},
        {0,1,1,1,0,0,0,0}
    };
} else if (c == 'E'){
    pixelMap = {
        {0,1,1,1,1,1,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,1,1,1,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,1,1,1,1,0,0}
    };
} else if (c == 'F'){
    pixelMap = {
        {0,1,1,1,1,1,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,1,1,1,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0}
    };
} else if (c == 'G'){
    pixelMap = {
        {0,0,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,1,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,1,1,0,0,0}
    };
} else if (c == 'H'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,1,1,1,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0}
    };
} else if (c == 'I'){
    pixelMap = {
        {0,1,1,1,1,1,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,1,1,1,1,1,0,0}
    };
} else if (c == 'J'){
    pixelMap = {
        {0,0,0,0,1,1,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,1,1,0,0,0}
    };
} else if (c == 'K'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,1,0,0,0},
        {0,1,0,1,0,0,0,0},
        {0,1,1,0,0,0,0,0},
        {0,1,0,1,0,0,0,0},
        {0,1,0,0,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0}
    };
} else if (c == 'L'){
    pixelMap = {
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,1,1,1,1,0,0}
    };
} else if (c == 'M'){
    pixelMap = {
        {0,1,1,0,1,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0}
    };
} else if (c == 'N'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,1,0,0,1,0,0},
        {0,1,1,0,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,0,1,1,0,0},
        {0,1,0,0,1,1,0,0},
        {0,1,0,0,0,1,0,0}
    };
} else if (c == 'O'){
    pixelMap = {
        {0,0,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,1,1,0,0,0}
    };
} else if (c == 'P'){
    pixelMap = {
        {0,1,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,1,1,1,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,0,0,0,0,0,0}
    };
} else if (c == 'Q'){
    pixelMap = {
        {0,0,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,0,1,1,0,0},
        {0,0,1,1,1,0,1,0}
    };
} else if (c == 'R'){
    pixelMap = {
        {0,1,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,1,1,1,0,0,0},
        {0,1,0,1,0,0,0,0},
        {0,1,0,0,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0}
    };
} else if (c == 'S'){
    pixelMap = {
        {0,0,1,1,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,0,0,0},
        {0,0,1,1,1,0,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,1,1,0,0,0}
    };
} else if (c == 'T'){
    pixelMap = {
        {0,1,1,1,1,1,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0}
    };
} else if (c == 'U'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,1,1,1,0,0}
    };
} else if (c == 'V'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,0,1,0,0,0},
        {0,0,1,0,1,0,0,0},
        {0,0,1,0,1,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0}
    };
} else if (c == 'W'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,0,1,0,1,0,0},
        {0,1,1,0,1,1,0,0}
    };
} else if (c == 'X'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,0,1,0,0,0},
        {0,0,1,0,1,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,1,0,1,0,0,0},
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0}
    };
} else if (c == 'Y'){
    pixelMap = {
        {0,1,0,0,0,1,0,0},
        {0,1,0,0,0,1,0,0},
        {0,0,1,0,1,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0}
    };
} else if (c == 'Z'){
    pixelMap = {
        {0,1,1,1,1,1,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,1,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,0,1,0,0,0,0},
        {0,0,1,0,0,0,0,0},
        {0,1,0,0,0,0,0,0},
        {0,1,1,1,1,1,0,0}
    };
} else if (c == ' '){
    pixelMap = {
        {0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0}
    };
}
if (doScrolling == 1){
    scrollPixels(milliseconds, pixelMap);
} else {
    displayPixels(milliseconds, pixelMap);
}

}但是,当我在程序中运行此代码时,它会返回:

error: assigning to an array from an initializer list

考虑一个更好的方法:

 bool pixelmap[26][8][8] = {
  {
    {0,0,1,1,1,0,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,1,1,1,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0}
  },
  // No, no need to repeat everything.
};
if (c >= 'A' && c <= 'Z')
{
   auto p=pixelmap[c-'A'];
   // ...
}

无需复制或分配任何内容。

不能在运行时使用初始值设定项列表将值显式分配给数组。

试试这个:

 auto tempMap = std::initializer_list<bool>({
    {0,0,1,1,1,0,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,1,1,1,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0},
    {0,1,0,0,0,1,0,0});
 std::copy(tempMap.begin(), tempMap.end(), pixelMap);

如果最终只是将其写入视频帧缓冲区,请考虑使用 char 而不是 bool。这将大大简化事情,尽管您的代码看起来不会那么漂亮;)