C++中的2D数组文字
2D array literals in C++
我正在尝试以指针到指针的形式构建一个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}
};
有可能吗?我应该怎么做?
编辑:
看来我可能是想做错事。我有一个函数,它以一个未知大小的bool
s的2D数组以及整数宽度和高度作为参数。目前,签名为:
foo(bool** data, int width, int height)
我希望能够为数据构造一个文字,但我也需要这个函数来处理任何大小的数组。
您可以有一个数组数组(有时称为多维数组):
bool data[][4] = {
{true, true, true, true},
{true, false, false, true},
{true, false, false, true},
{true, true, true, true}
};
然而,它不能转换为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};
或者如果你真的想要动态数组(这几乎肯定是个坏主意):
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)
};
或者,您可以坚持使用数组,并修改函数以引用数组而不是指针,如果需要支持不同的维度,则可以将维度推断为模板参数。只有在编译时维度总是已知的情况下,这才有可能。
template <size_t N, size_t M>
void do_something(bool (&array)[N][M]);
do_something(data);
bool data_[][4] = {
{true, true, true, true},
{true, false, false, true},
{true, false, false, true},
{true, true, true, true}
};
bool *data[4] = { data_[0], data_[1], data_[2], data_[3] };
bool *data[] = {
(bool []){true, true, true, true}
,(bool[]) {true, false, false, true}
,(bool[]) {true, false, false, true}
,(bool[]) {true, true, true, true}
};
这可以根据您的意愿转换为bool**
。这不是一个数组。这是一个指针数组。
通过用(bool [])
对每一行进行预处理,我们可以使其衰减为一个指针。因此,每一行都是一个指针,然后可以组合成一个由四个指针组成的数组。
编辑:您可以将显式4
放入[
大括号]
中,因为它可以由编译器推导出来。
相关文章:
- 将特定索引处的字符数组内容与字符文字 - cpp 进行比较
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 多字符文字到字符数组
- 为什么具有单独字符的字符数组不像字符串文字那样以 null 终止符结尾?
- C 指针可以指向字符串文字的静态成员数组
- 初始化char数组和具有整数文字的char时的差异
- 为什么 clang 将字符串文字作为指针而不是数组
- 使用C++用户定义的文字来初始化数组
- 将C数组文字转换为在C 构造函数中工作
- 为什么gcc允许字符串文字大于数组的char数组初始化
- 在C 中,这是用字符串文字初始化char数组的好习惯
- 设置数组一次索引很多?复合文字
- 为什么我需要一个类似于复合文字的临时构造来初始化我的std::数组成员
- C++:直接在参数列表中使用数组文字的对象构造函数
- 如何在C++中使用字符串文字初始化字符的动态数组
- 文字字符数组
- 如何使用数组(无向量)将多个字符串文字传递给函数
- 数组文字语法怪癖
- 从字符串文字初始化字符数组
- C++中的2D数组文字