Eri*_*ric 7 c++ literals multidimensional-array
我正在尝试以指针指针的形式构建一个2D数组.这不起作用:
bool** data = {
new bool[4] {true, true, true, true},
new bool[4] {true, false, false, true},
new bool[4] {true, false, false, true},
new bool[4] {true, true, true, true}
};
Run Code Online (Sandbox Code Playgroud)
可能吗?我应该怎么做?
看起来我可能试图做错事.我有一个函数,它将一个bool未知大小的s 数组,以及整数宽度和高度作为参数.目前,签名是:
foo(bool** data, int width, int height)
Run Code Online (Sandbox Code Playgroud)
我希望能够为数据构造一个文字,但我也需要这个函数来适用于任何大小的数组.
Mik*_*our 14
你可以有一个数组数组(有时称为多维数组):
bool data[][4] = {
{true, true, true, true},
{true, false, false, true},
{true, false, false, true},
{true, true, true, true}
};
Run Code Online (Sandbox Code Playgroud)
但是,这是不可转换的bool**,因此如果您需要转换,那么这将无效.
或者,指向静态数组的指针数组(可转换为bool**):
bool data0 = {true, true, true, true};
bool data1 = {true, false, false, true};
bool data2 = {true, false, false, true};
bool data3 = {true, true, true, true};
bool * data[] = {data0, data1, data2, data3};
Run Code Online (Sandbox Code Playgroud)
或者如果你真的想要动态数组(这几乎肯定是一个坏主意):
bool * make_array(bool a, bool b, bool c, bool d) {
bool * array = new bool[4];
array[0] = a;
array[1] = b;
array[2] = c;
array[3] = d;
return array;
}
bool * data[] = {
make_array(true, true, true, true),
make_array(true, false, false, true),
make_array(true, false, false, true),
make_array(true, true, true, true)
};
Run Code Online (Sandbox Code Playgroud)
或者,也许你可以坚持使用数组,并修改你的函数来引用数组而不是指针,如果你需要支持不同的维度,可以将维度推断为模板参数.只有在编译时始终知道维度时,才可以执行此操作.
template <size_t N, size_t M>
void do_something(bool (&array)[N][M]);
do_something(data);
Run Code Online (Sandbox Code Playgroud)