我想声明一个没有初始大小的2D数组。它不断给我一个错误:动态分配一个数组
Error C2078: too many initializes.
我试图动态分配我的数组,但没有任何工作,因为我不太熟悉动态分配。我的问题是如果有一种可能的方式来声明一个没有初始大小的数组,如果是的话,最有效的方法是什么?
我想声明一个没有初始大小的2D数组。它不断给我一个错误:动态分配一个数组
Error C2078: too many initializes.
我试图动态分配我的数组,但没有任何工作,因为我不太熟悉动态分配。我的问题是如果有一种可能的方式来声明一个没有初始大小的数组,如果是的话,最有效的方法是什么?
my question is If there is a possible way to declare an Array without an initial size and if so what is the most efficient way to do it ?
当然,你可以提供向量来表示一个二维数组的向量(假设整数值):
std::vector<std::vector<int>> my2DArray;
嗯,关于效率也许性能和内存碎片明智的做法是用一个允许2D坐标访问的接口在内部保存一维矢量。
这将需要您知道并指定尺寸限制。
所以,如果你真的想保持一个2D结构没有初始大小上面提到的载体向量是要走的路。
我写了一个简单的程序,使用指针,新的和删除功能。您可以添加更多功能。
#include <iostream>
using namespace std;
int main()
{
int size;
cout << "Input size of 2D array : ";
cin >> size;
int *ptr; // Declare Pointer
ptr = new int[size*size]; // Allocate memory of all elements in 2D array
for (int i = 0; i < size*size; i++) {
*(ptr + i) = 0; // Initialize every element to 0
}
cout << "Printing the 2D Array" << endl << endl;
int iterSize = 0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cout << *(ptr + iterSize) << " ";
}
cout << endl;
}
delete [] ptr; // ptr memory is released
return 0;
}
这里是0输出初始化所有元素:
'cout << *(ptr + i + j)<<“”;'是错的 –
感谢您注意@MikeVine,我通过添加一个新变量iterSize –
_ “什么是最有效的方式做到这一点?” _使用['的std :: VECTOR']( http://en.cppreference.com/w/cpp/container/vector)。 – user0042
请包括您迄今尝试过的代码。 – brownKnight
尝试查看“矢量”。如果需要,你可以自己做一个自定义的。 – JustinJmnz