2017-08-21 95 views
-4

我想声明一个没有初始大小的2D数组。它不断给我一个错误:动态分配一个数组

Error C2078: too many initializes.

我试图动态分配我的数组,但没有任何工作,因为我不太熟悉动态分配。我的问题是如果有一种可能的方式来声明一个没有初始大小的数组,如果是的话,最有效的方法是什么?

+2

_ “什么是最有效的方式做到这一点?” _使用['的std :: VECTOR']( http://en.cppreference.com/w/cpp/container/vector)。 – user0042

+2

请包括您迄今尝试过的代码。 – brownKnight

+0

尝试查看“矢量”。如果需要,你可以自己做一个自定义的。 – JustinJmnz

回答

1

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结构没有初始大小上面提到的载体向量是要走的路。

1

我写了一个简单的程序,使用指针,新的和删除功能。您可以添加更多功能。

#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输出初始化所有元素:

Initialized all elements to 0

+1

'cout << *(ptr + i + j)<<“”;'是错的 –

+0

感谢您注意@MikeVine,我通过添加一个新变量iterSize –