在 C++ 中重新分配多维数组
Reassigning a multidimensional array in C++
我正在创建一个函数,该函数将获取一个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。这将大大简化事情,尽管您的代码看起来不会那么漂亮;)
相关文章:
- 将数组的地址分配给变量并删除
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 获取字符串的长度并将其分配给数组
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 使用递归模板动态分配的多维数组
- 如何正确填充在堆上分配的二维数组?
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 关于字符数组,我正在尝试将数组中的每个字符分配给另一个值
- 我似乎无法为指针分配一个数组,然后更改数组的内容
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 无法分配C++数组
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 分配 2D 可变大小的数组
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- 动态分配字符数组的内存
- C++具有动态分配的字符数组的结构
- C 通过参考分配 /数组传递内存
- 使用字符串或字符动态分配(数组)