C++ 我需要一个在C+中具有一个动态维度的二维数组+;
我需要创建一个二维数组,其中有8个“行”,但“列”不是预先确定的 关于这个例子: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
[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);