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有一个需要数组的函数,我认为向量不是一个选项。