C++ 我需要一个在C+中具有一个动态维度的二维数组+;

C++ 我需要一个在C+中具有一个动态维度的二维数组+;,c++,arrays,C++,Arrays,我需要创建一个二维数组,其中有8个“行”,但“列”不是预先确定的 关于这个例子: [0], ['mum', 'dad', 'uncle'] [1], ['brother', 'sister'] [2], ['friend', 'colleague', 'boss', 'employee'] .... and so on 然后我必须滚动第一个索引(1到8)并读取所有列的所有可能值(对于每个“索引”,我有其中有多少元素的计数) 我需要用类似的方法来阅读 ary[2][3] --->th

我需要创建一个二维数组,其中有8个“行”,但“列”不是预先确定的

关于这个例子:

[0], ['mum', 'dad', 'uncle']
[1], ['brother', 'sister']
[2], ['friend', 'colleague', 'boss', 'employee']
.... and so on
然后我必须滚动第一个索引(1到8)并读取所有列的所有可能值(对于每个“索引”,我有其中有多少元素的计数)

我需要用类似的方法来阅读

ary[2][3]    --->that would return "boss"
下面是我正在使用的其他示例

unsigned char (*ary)[n] = malloc(sizeof(unsigned char[8][n]));
但它不编译并提供:

错误:无法初始化“unsigned char**”类型的变量 具有类型为“void*”的右值


<如何在C++中正确声明和读取这种数组?

< p>如果编译时已知行数,可以使用


使用C++时,避免使用<代码> Malc 。 假设

n
是编译时常量,可以使用:

unsigned char (*ary)[n] = new unsigned char[8][n];
如果
n
是一个运行时变量,则很可能需要使用:

unsigned char (*ary)[8] = new unsigned char[n][8];
在以下情况下,您可以避免处理动态分配内存的问题:

  • 无符号字符的数组使用
    std::array
  • 您可以使用
    std::vector
    来捕获数据的动态特性

  • std::结构(n);
    
    <代码> >:代码:>:数组。在C++中使用原始内存管理和指针,建议使用类型如 STD::vector < /COD>或 STD::数组< /代码>,因为它们没有指针衰变相同的怪异。在尝试多个动态数组之前,你应该先练习一个动态数组。d应该从比
    char[]更简单的类型开始<代码> >或代码>字符串< /代码>或是任何内容。<代码>“妈妈”<代码>将导致C++中大量的哀嚎和咬牙,因为它将尝试创建多字节字符而不是字符串。您可能会得到编译器警告,但我认为我不能保证。您可能根本没有诊断,并花费一个下午的砰击哟。你的头靠在墙上,尖叫着“为什么?为什么?”。我建议你改为“妈妈”
    std::vector<std::vector<std::string>>
    
    unsigned char (*ary)[n] = new unsigned char[8][n];
    
    unsigned char (*ary)[8] = new unsigned char[n][8];
    
    std::struct<std::array<unsigned char, 8>> ary(n);