C++ 在c+中定义具有动态第一维度和静态第二维度的二维数组+;

C++ 在c+中定义具有动态第一维度和静态第二维度的二维数组+;,c++,arrays,C++,Arrays,我想定义一个int数组,其中第一个维度是动态选择的,而第二个维度是静态的-- 类似于int数组[][8]。不幸的是,我不能动态分配这样的数组整数[][8]=新整数[11][8]生成错误: 错误:初始值设定项无法确定“数组”的大小 6 | int数组[][8]=新int[11][8]; | ^~~~~~~~~~~~~~ 2d.cpp:6:20:错误:必须使用大括号内的初始值设定项初始化数组 或者当我尝试以下代码时: int数组[][8]=新的int*[1

我想定义一个int数组,其中第一个维度是动态选择的,而第二个维度是静态的-- 类似于
int数组[][8]
。不幸的是,我不能动态分配这样的数组<代码>整数[][8]=新整数[11][8]生成错误:

错误:初始值设定项无法确定“数组”的大小
6 | int数组[][8]=新int[11][8];
|                      ^~~~~~~~~~~~~~
2d.cpp:6:20:错误:必须使用大括号内的初始值设定项初始化数组
或者当我尝试以下代码时:

int数组[][8]=新的int*[11];
数组[0]=新整数[8];
我明白了


在C++中,甚至可以使用吗?< /P> < P>只使用<代码> STD::向量< /> >和<代码> STD::数组< /代码>:

#包括

#包含

只需使用
std::vector
std::array

#包括

#包括

我将回答我自己的问题:

int(*array)[8]=新的int[11][8];

<>我忘记了C++规则对于创建类型定义有多么的坏——特别是包括指针、数组和函数指针。我在数组周围添加了缺少的括号,现在一切正常。

我将回答我自己的问题:

int(*array)[8]=新的int[11][8];

<>我忘记了C++规则对于创建类型定义有多么的坏——特别是包括指针、数组和函数指针。我在数组周围添加了缺少的括号,现在一切正常了。

std::vector myArray(11)标准::向量myArray(11)这不是我想要的。关于2D数组,我对C++语法感到困惑,我想澄清它。C++中的数组是哑的,只有更高层次的抽象才能达到你所要寻找的。这正是你想要的:“int数组,其中第一个维度是动态选择的,而第二个维度是静态的”。这不是我想要的。关于2D数组,我对C++语法感到困惑,我想澄清它。C++中的数组是哑的,只有更高层次的抽象才能达到你所要寻找的。这正是您所要求的:“int数组,其中第一个维度是动态选择的,而第二个维度是静态的”。那么这与
std::vector/std::array
版本相比有什么优势呢?现在,你必须关注释放内存的问题。现代C++程序应该避免使用<代码> NeX[]/COD>。@ PaulMcKenzie不需要咄咄逼人。是的,如果这是一个“真正的问题”,我会建议你也使用它,如果你没有提到它,我会将其作为一个替代方案加以评论。但是像
newint[11][8]
这样的表达式是语言的一部分,不管你喜欢与否,知道如何使用它们是有价值的。此外,如果唯一的问题是记住删除内存,
auto-arr=std::make_unique(11)应该可以正常工作
std::vector
在概念上可能有点过头了。那么与
std::vector/std::array
版本相比,这有什么优势呢?现在,你必须关注释放内存的问题。现代C++程序应该避免使用<代码> NeX[]/COD>。@ PaulMcKenzie不需要咄咄逼人。是的,如果这是一个“真正的问题”,我会建议你也使用它,如果你没有提到它,我会将其作为一个替代方案加以评论。但是像
newint[11][8]
这样的表达式是语言的一部分,不管你喜欢与否,知道如何使用它们是有价值的。此外,如果唯一的问题是记住删除内存,
auto-arr=std::make_unique(11)应该可以正常工作
std::vector
在概念上可能有些过分。
2d2.cpp:6:22: error: initializer fails to determine size of ‘array’
    6 |     int array[][8] = new int*[11];
      |                      ^~~~~~~~~~~~
2d2.cpp:6:22: error: array must be initialized with a brace-enclosed initializer
2d2.cpp:7:25: error: incompatible types in assignment of ‘int*’ to ‘int [8]’
    7 |     array[0] = new int[8];