如何在C++中创建二维数组?

如何在C++中创建二维数组?,c++,arrays,c++11,C++,Arrays,C++11,好吧,这个问题看起来很傻,但请容忍我。当我试图在C++中创建一个2D数组时,它给了我一些警告:LEN是一个整数: 双a[len][len]; //警告:可变长度阵列是C99的一项功能 //警告:使用了可变长度数组 于是我又试了一个: 双精度**a=新双精度[len][len]; //错误:只有已分配数组的第一个维度可以具有动态大小 //常量表达式中不允许读取非常量变量“len” 如何在C++11中正确执行此操作?对您可以使用的内容有任何限制吗?如果你打算做数组操作,我会说只要使用[Eigen]s

好吧,这个问题看起来很傻,但请容忍我。当我试图在C++中创建一个2D数组时,它给了我一些警告:LEN是一个整数:

双a[len][len]; //警告:可变长度阵列是C99的一项功能 //警告:使用了可变长度数组 于是我又试了一个:

双精度**a=新双精度[len][len]; //错误:只有已分配数组的第一个维度可以具有动态大小 //常量表达式中不允许读取非常量变量“len”
如何在C++11中正确执行此操作?

对您可以使用的内容有任何限制吗?如果你打算做数组操作,我会说只要使用[Eigen]

std::vector alen,std::vectorlen;数组维度必须是常量。有些编译器允许代码的第一位更像C。不过,这是一种极好的方式,可以将顶部从堆栈中剥离出来。如果您事先不知道尺寸,我建议使用。你仍然可以获得连续存储,但它是在动态存储中,通常你有更多的内存。有很多方法可以通过不同的折衷来实现这一点。也许在销毁部分需要注意,以使其取代自动双a[len][len];那就好了。因此,使用智能指针(最终是std::vector)来取代所有繁琐的内存管理。我建议涵盖销毁逻辑以确保完整性,因为此选项的清理非常重要。这是分配具有统一列数的动态2D数组的最差方法。它有很多问题-内存碎片,如果其中一个新的[]调用失败,很难诊断错误,等等@error如果你增加内存释放,我会投赞成票。这会是一个很好的评论,但作为一个回答,它很弱。是的,我不想使用std::vector。我认为没有必要再增加一个第三方库。@ycao-为什么不想使用std::vector?自1998以来,它是C++标准库的一部分。你还不愿意使用其他C++库函数吗?
double** a=new double*[len];
for(int i=0;i<len;++i)
{
   a[i]=new double[len];
}