Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何动态创建c++;已知第二维度的数组?_C++_Arrays_Multidimensional Array - Fatal编程技术网

C++ 如何动态创建c++;已知第二维度的数组?

C++ 如何动态创建c++;已知第二维度的数组?,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,我有一个功能: void foo(double[][4]); 它接受一个二维数组,其第二维等于4。如何分配2d数组以便将其传递给函数?如果我这样做: double * arr[4]; arr = new double[n][4]; 其中,编译器不知道n。我无法编译它。如果我使用一个通用的2d动态数组,函数foo将不会接受它 typedef double v4[4]; v4* arr = new v4[n]; 考虑切换到数组和向量 不过可以考虑切换到数组和向量。如有疑问,最好使用type

我有一个功能:

void foo(double[][4]);
它接受一个二维数组,其第二维等于4。如何分配2d数组以便将其传递给函数?如果我这样做:

double * arr[4];
arr = new double[n][4];
其中,编译器不知道n。我无法编译它。如果我使用一个通用的2d动态数组,函数foo将不会接受它

 typedef double v4[4];
 v4* arr = new v4[n];
考虑切换到数组和向量


不过可以考虑切换到数组和向量。

如有疑问,最好使用
typedef

 typedef double four[4];
 four *arr;     // equivalently double (*arr)[4];
 arr = new four[n];
没有
typedef
你会变得更加神秘

double (*arr)[4];
arr = new double [n][4];

您应该考虑使用标准容器(<代码> STD::向量< /代码>等)或容器容器。

 typedef double four[4];
 four *arr;     // equivalently double (*arr)[4];
 arr = new four[n];
没有
typedef
你会变得更加神秘

double (*arr)[4];
arr = new double [n][4];

您应该考虑使用标准容器(<代码> STD::vector < /COD>等)或容器容器。

< P>可选地,创建一个新类型并占用一个符号,您可以创建一个指向指针的指针,并这样做:

double **arr = new double*[j];
for (int i = 0; i < j; ++i)
{
    arr[i] = new double[4];
}
double**arr=new double*[j];
对于(int i=0;i
j
是保存动态值的
int
变量。
我已经编写了一个简单的代码,显示它正在工作,请查看。

除了创建一个新类型并占用一个符号之外,您还可以创建一个指向指针的指针,并按如下方式操作:

double **arr = new double*[j];
for (int i = 0; i < j; ++i)
{
    arr[i] = new double[4];
}
double**arr=new double*[j];
对于(int i=0;i
j
是保存动态值的
int
变量。
我已经写了一个简单的代码来说明它的工作原理,请查看。

我知道这可能不是OP想要做的,但它可能会帮助其他需要类似答案的人

您正在尝试创建静态成功数组的动态数组。STL得到了您的解决方案:
std::vector
std::array

有了这些容器,事情就简单多了:

std::vector<std::array<int, 4>> foo;

// Allocate memory
foo.reserve(8);

// Or instead of 8, you can use some runtime value
foo.reserve(someSize);

// Or did not allocated 8 + someSize, but ensured
// that vector has allocated at least someSize

// Add entries
foo.push_back({1, 2, 3, 4});

// Looping
for (auto&& arr : foo) {
    arr[3] = 3;
}

// Access elements
foo[5][2] = 2;
std::vector foo;
//分配内存
食物储备(8);
//或者,您可以使用一些运行时值来代替8
食物储备(一定尺寸);
//或者没有分配8+某种大小,但确保
//该向量至少分配了一些大小
//添加条目
foo.推回({1,2,3,4});
//循环
用于(自动(&A)arr:foo){
arr[3]=3;
}
//访问元素
foo[5][2]=2;

我知道这可能不是OP的本意,但它可能会帮助其他需要类似答案的人

您正在尝试创建静态成功数组的动态数组。STL得到了您的解决方案:
std::vector
std::array

有了这些容器,事情就简单多了:

std::vector<std::array<int, 4>> foo;

// Allocate memory
foo.reserve(8);

// Or instead of 8, you can use some runtime value
foo.reserve(someSize);

// Or did not allocated 8 + someSize, but ensured
// that vector has allocated at least someSize

// Add entries
foo.push_back({1, 2, 3, 4});

// Looping
for (auto&& arr : foo) {
    arr[3] = 3;
}

// Access elements
foo[5][2] = 2;
std::vector foo;
//分配内存
食物储备(8);
//或者,您可以使用一些运行时值来代替8
食物储备(一定尺寸);
//或者没有分配8+某种大小,但确保
//该向量至少分配了一些大小
//添加条目
foo.推回({1,2,3,4});
//循环
用于(自动(&A)arr:foo){
arr[3]=3;
}
//访问元素
foo[5][2]=2;

为什么不给你一个std::vector?数组只是c而不是c++@Android400矢量不是旧式数组的替代品。。数组不确定时,使用向量。解决了直接处理数组的所有难题。@HumamHelfawi我知道,但大小不是静态的。所以,一个向量也可能是一个解决方案,不会有太大的杀伤力。@Android400在这种情况下是的。但是由于OP有一个需要数组的函数,我认为向量不是一个选项?数组只是c而不是c++@Android400矢量不是旧式数组的替代品。。数组不确定时,使用向量。解决了直接处理数组的所有难题。@HumamHelfawi我知道,但大小不是静态的。所以,一个向量也可能是一个解决方案,不会有太大的杀伤力。@Android400在这种情况下是的。但是由于OP有一个需要数组的函数,我认为向量不是一个选项。